본문 바로가기

알고리즘

탐욕알고리즘 - Lv1(체육복)-2

반응형
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        
        //n개의 학생들의 배열 생성
        int[] students = new int[n];
        //도둑맞은 인원들은 -- 
        for(int i=0; i<lost.length; i++){
            students[lost[i]-1]--;
        }
        //여벌의 옷을 가져온 학생들은 ++
        for(int i=0; i< reserve.length; i++){
            students[reserve[i]-1]++;
        }
        //도둑맞은 인원들의 전,후로 여벌의 옷을 가지고 있는 학생을 찾는다.
        for(int i=0; i<n; i++){
            int prev = i-1;
            int next = i+1;
            if(students[i]==-1){ // 도둑맞은 인원일 경우
                if(prev>=0 && students[prev] ==1){//현재 학생이 첫번째가 아니고, 이전 학생이 여벌옷이 있으면 빌린다.
                    students[prev]--;
                    students[i]++;
                } else if(next<n && students[next]==1){//현재 학생이 마지막이 아니고, 이후 학생이 여벌옷이 있으면 빌린다.
                    students[next]--;
                    students[i]++;
                }
            }
            if(students[i]>=0){ //한벌이상 체육복을 가진 학생들의 수를 집계한다.
                answer++;
            }
        }
     return answer;
    }
}

if문이 하나 줄은것 빼고는 저번과 똑같다. 다만 시간이 매우  단축되었을뿐... 코테도 문제풀듯이?.. 푸는게 의미가 있을까?... 결국 자료구조등을 이용해서 코딩테스트를 진행해야하지 않을까?? 싶다... 일단 익숙해지자... 추가적으로 학생들의 순번이 주어진 lost와reserve의 배열에서 순번이 배열의 인덱스를 뜻하는줄 알고 실수를 했다. 배열의 인덱스는 순서-1 임을 다시한번 명심하자.

반응형