✔ 문제파악
https://school.programmers.co.kr/learn/courses/30/lessons/42862?itm_content=course14743
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 체육복을 잃어버린 사람들의 배열과, 여분 체육복을 가진 사람들이 존재한다.
- 만일, 앞뒤 사람에게만 체육복을 빌려줄 수 있을 경우, 최대한 많은 학생이 체육복을 입을 수 있는 경우의 수는 무엇일까?
✔ 접근방법
그리디 알고리즘
1) int answer = n-lost.length;
-> 체육복을 잃어버린 사람 수를 빼준다.
2-1) 옷은 잃어버렸지만, 여분의 체육복이 있었을 경우
-> 다른 사람에게 빌려주진 못하지만, 자기 자신의 옷은 입을 수 있으므로, answer ++;
-> 앞으로 빌려주지 못하도록 표시해야함.
2-2) 양 옆의 친구들이 옷이 있을 경우
-> answer ++;
💢 주의 : break문을 사용하지 않으면 중복 처리가 되어 오류발생
💢 주의 : 예제 테스트 부분에서 lost와 reserve가 오름차순으로 정렬되지 않은 테스트 입력 값 존재 (정렬 필수)
❤ 전체코드
import java.util.Arrays;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n-lost.length;
Arrays.sort(lost);
Arrays.sort(reserve);
// 나는 여분의 옷이 있었지만 잃어버렸다.
for(int i=0; i<lost.length; i++){
for(int j=0; j<reserve.length; j++){
if(lost[i] == reserve[j]){
lost[i] = -1;
reserve[j] = -1;
answer++;
break;
}
}
}
// 여분의 옷이 있어서 다른 친구 줬다.
for(int i=0; i<lost.length; i++){
for(int j=0; j<reserve.length; j++){
if(lost[i] == reserve[j]-1 || lost[i] == reserve[j]+1){
answer++;
lost[i] = -1;
reserve[j] = -1;
break;
}
}
}
return answer;
}
}'[Algorithm] 알고리즘' 카테고리의 다른 글
| [백준][boj]N과 M(5) - JAVA (0) | 2025.01.10 |
|---|---|
| [프로그래머스][JAVA] 조이스틱 - 그리디 (1) | 2025.01.06 |
| [백준][boj]가르침 (JAVA) - 완전탐색의 유연한 생각 (1) | 2024.12.23 |
| [백준][boj]연산자 끼워넣기 (JAVA) - 재귀의 기본 (0) | 2024.12.17 |
| [프로그래머스][level3] 가장 긴 팰린드롬 (Python) (1) | 2024.10.31 |