본문 바로가기

개발지/코테

[프로그래머스] 코테연습 - 체육복(lv.1)

- 내 방법 풀이

  • 체육복을 전부 가졌다고 가정한 N길이의 배열 선언 후, lost 배열과 reserve배열을 순회하며 해당하는 번호의 학생들의 배열값을 조정해주었다.
  • 이후 앞에서부터 순회하며 체육복의 여유가 있는 사람이 앞 번호의 친구로부터 체육복을 빌리는 것을 가정하여 알고리즘을 구성했지만, 배열에서 뒷번호의 친구에게밖에 못 빌리는 다음 예시와 ( { 0, 1, 1, 0} ) 같은 배열의 상황을 고려하지 못 해, 테스트의 여러개에서 실패가 낫다.
  • 이후 조건을 수정하여, 앞 뒤 사람에게 빌리도록 코드에 반영하여 번호의 숫자가 -1, 즉 체육복이 없는 사람을 n에서 빼주는 계산으로 통과했다.
import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int[] students = new int[n];
        
        for (int i : lost) {
            students[i-1]--;
        }
        
        for (int i : reserve) {
            students[i-1]++;
        }
        
        for (int i = 0; i < students.length; i++) {
            if (students[i] == -1) {
                if (i > 0 && students[i-1] == 1) {
                    students[i]++;
                    students[i-1]--;
                } else if (i < students.length - 1 && students[i+1] == 1) {
                    students[i]++;
                    students[i+1]--;
                }
            }
        }
        
        for (int i : students) {
            if (i==-1) n--;
        }
        
        return n;
    }
}