본문 바로가기
Coding Test/Programmers

[프로그래머스] 체육복 [JAVA(자바)]

‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀

문제 👉 <코딩테스트 연습 - 체육복 | 프로그래머스>

1. 문제

체육복을 잃어버린 학생은 앞 뒤 번호 학생들 중 여벌의 체육이 있는 학새에게 체육복을 빌릴 수 있다.

여벌의 체육이 있는 학생이 도난을 당한 경우는 체육복 하나만 도난당한 것이며, 남은 체육복을 다른 학생에게 빌려줄 수 없다.

2. 풀이

Greedy 를 이용한 문제 풀이

  1. 전체 학생의 체육복 개수를 하나의 배열에 저장한다.
    1. 기본 체육복의 개수를 배열의 초기값이 0으로 가정
    2. 여분의 체육복이 있을 경우 : +1
    3. 체육을 도난당한 경우 : -1
  2. 체육복의 개수가 -1인 학생의 경우 왼쪽/오른쪽 학생을 확인하고 빌릴 수 있으면 빌린다.

3. 코드

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = n;
        int[] students = new int[n];

        for (int i : reserve) { students[i-1]++; }
        for (int i : lost) { students[i-1]--; }

        for (int i=0; i<n; i++) {
            if (students[i] < 0) {
                // 왼쪽 학생
                if (i != 0 && students[i-1] > 0) {
                    students[i]++;
                    students[i-1]--;
                }
                // 오른쪽 학생
                else if (i != n-1 && students[i+1] > 0) {
                    students[i]++;
                    students[i+1]--;
                }
                // 빌릴지 못할 경우
                else { answer--; }
            }
        }

        return answer;        
    }
}


References


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글