개발공부/코딩테스트 연습문제

[프로그래머스] 체육복

ku-na 2022. 1. 6. 15:13

문제 설명과 제한사항

풀이

import java.util.Arrays;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int loster = 0;
        int reserver = 0;
        int count = n - lost.length;
        Arrays.sort(lost);
        Arrays.sort(reserve);
        
        while(lost.length > loster && reserve.length > reserver){
            if(lost[loster] < reserve[reserver]){
                if(lost[loster] + 1 == reserve[reserver]){
                    loster++;
                    reserver++;
                    count++;
                }
                else{
                    loster++;
                }
            }
            else if(lost[loster] > reserve[reserver]){
                if(lost[loster] - 1 == reserve[reserver]){
                    loster++;
                    reserver++;
                    count++;
                }
                else{
                    reserver++;
                }
            }
            else if(lost[loster] == reserve[reserver]){
                loster++;
                reserver++;
                count++;
            }
        }
        return count;
    }
}

++

결과 먼저 작성하면 

테스트코드 5번 테스트코드 12번 실패다.

우선 처음 봤을때 생각한 건 배열에 담아서 초기화 하고 체육 가능한 학생들만 표시하는

방법을 생각 했다.

그리고 다른 사람의 풀이를 먼저 봤는데, 그 방법이 있어서

정렬로 한번 해볼까? 라는 생각을 했다.

오름차순으로 정렬하고 하나 하나 비교하면서 체육복을 빌린 인원을 카운트

전체 - 도둑맞은인원 + 빌린 인원

여기서 간과했던건 여벌이 있는 학생도 도둑맞았을 경우.

그래서 해당 케이스도 포함했는데,,, 이해를 못해서 1차적으로 포기했다.

다른방법으로 풀 수 있는데 귀찮았다.