[프로그래머스] 42862번 : 체육복

이도은·2022년 1월 16일
1

코드

//import java.util.Arrays;

public class PRO_42576 {
    public static int solution(int n, int[] lost, int[] reserve) {
        int[] student = new int[n + 1];

        for (int i = 0; i < student.length; i++) student[i] = 1;

        for (int i : lost) student[i] -= 1;

        for (int i : reserve) student[i] += 1;

        for (int i = 1; i < student.length; i++) {
            if (student[i] != 2) continue;

            if (student[i - 1] == 0) {
                student[i] -= 1;
                student[i - 1] += 1;
                continue;
            }

            if (i != n && student[i + 1] == 0) {
                student[i] -= 1;
                student[i + 1] += 1;
            }
        }

        int answer = 0;

        for (int i = 1; i < student.length; i++) {
            if (student[i] != 0)
                ++answer;
        }

        return answer;
    }

/*
    public static int solution(int n, int[] lost, int[] reserve) {
        Arrays.sort(lost);
        Arrays.sort(reserve);

        //여벌 체육복을 가져왔지만 도난당한 학생 찾기
        for (int i = 0; i < lost.length; i++) {
            for (int j = 0; j < reserve.length; j++) {
                if (lost[i] == reserve[i]) {
                    answer++;
                    lost[i] = -1;
                    reserve[i] = -1;
                    break;
                }
            }
        }

        //체육복 도난 당한 학생에게 체육복을 빌려줄 수 있는지
        for (int i = 0; i < lost.length; i++) {
            for (int j = 0; j < reserve.length; j++) {
                if (lost[i] == reserve[j] - 1 || lost[i] == reserve[j] + 1) {
                    answer++;
                    reserve[i] = -1;
                    break;
                }
            }
        }

        return answer;
    }
*/

    public static void main(String[] args) {

        int n = 5;
        int[] lost = {2, 4};
        int[] reserve = {1, 3, 5};

        System.out.println(solution(n, lost, reserve));
    }
}

풀이 및 느낀점

학생 배열을 하나 생성하여 체육복을 잃어버린 학생과 여분의 체육복이 있는 학생을 저장한다. 만약 학생의 체육복의 개수가 2개이고 앞 학생의 체육복의 개수가 0개라면, 앞 학생에게 체육복을 빌려주면서 자신의 체육복의 개수는 1개로 변경하고 앞 학생의 체육복 개수를 1개로 변경해준다. 뒤 학생의 경우도 마찬가지이다.

참고자료

0개의 댓글