728x90
문제
정답
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
answer = n - lost.length;
Arrays.sort(lost);
Arrays.sort(reserve);
for(int i = 0; i < reserve.length; i++) {
for(int j = 0; j < lost.length; j++) {
if(reserve[i] == lost[j]) {
lost[j] = -1;
reserve[i] = -1;
answer++;
break;
}
}
}
for(int i = 0; i < reserve.length; i++) {
for(int j = 0; j < lost.length; j++) {
if(lost[j] == -1) continue;
if(reserve[i] - 1 == lost[j] || reserve[i] + 1 == lost[j]) {
lost[j] = -1;
reserve[i] = -1;
answer++;
break;
}
}
}
return answer;
}
}
풀이
우선 체육복을 잃어버린 사람(lost)과 체육복이 2개 있는 사람(reserve)을 모두 정렬해줍니다.
for(int i = 0; i < reserve.length; i++) {
for(int j = 0; j < lost.length; j++) {
if(reserve[i] == lost[j]) {
lost[j] = -1;
reserve[i] = -1;
answer++;
break;
}
}
}
for문을 통해서 체육복이 2장 있지만 잃어버린 사람(reserve와 lost에 모두 있는 사람)을 찾아 -1로 저장합니다.
for(int i = 0; i < reserve.length; i++) {
for(int j = 0; j < lost.length; j++) {
if(lost[j] == -1) continue;
if(reserve[i] - 1 == lost[j] || reserve[i] + 1 == lost[j]) {
lost[j] = -1;
reserve[i] = -1;
answer++;
break;
}
}
}
두 번째 for문에서는 체육복이 2개 있는 사람이 잃어버린 사람에게 빌려주는 과정인데 이때 if문을 통해 -1(첫 번째 for문에 의해)인 사람인 경우 continue를 하여 다음 사람으로 넘어가게 됩니다.
만약 체육복이 2장 있고, 잃어버리지도 않았다면 if문을 통해 자신의 앞 번호나 뒷 번호 사람중에 잃어버린 사람이 있는지 찾고, 만약에 있다면 lost와 reserve 모두 -1을 저장하고, answer를 증가하는 방법으로 문제를 풀었습니다.
728x90
'프로그래머스 코딩테스트 > JAVA' 카테고리의 다른 글
[프로그래머스] 피보나치 수 JAVA (0) | 2024.09.05 |
---|---|
[프로그래머스] 대충 만든 자판 JAVA (0) | 2024.08.22 |
[프로그래머스] 문자열 나누기 JAVA (0) | 2024.08.22 |
[프로그래머스] 옹알이 (2) JAVA (0) | 2024.08.21 |
[프로그래머스] 로또의 최고 순위와 최저 순위 JAVA (0) | 2024.08.20 |