프로그래머스 코딩테스트/JAVA

[프로그래머스] 체육복 JAVA

Coding-Su 2024. 8. 22. 18:34
728x90

문제

[프로그래머스] 체육복

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

정답

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