본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 체육복 - 자바

by binghe819 2020. 7. 3.

https://programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번�

programmers.co.kr

1. 풀이


쉬운 그리디 문제이다.

 

여러 풀이 방법이 있지만, 순서대로 하나하나 하면 풀이가 된다.

 

2. 코드


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

        int[] status = new int[n];

        // 모두 1씩 초기화
        for(int i = 0; i < n ;i++)
            status[i] = 1;

        // lost 체크
        for(int l : lost){
            status[l-1]--;
        }

        // reserve 체크
        for(int r : reserve){
            status[r-1]++;
        }

        // 주변 사람 도와주기
        for(int i = 0; i < n; i++){
            // 만약 체육복이 없다면
            if(status[i] == 0){
                // 왼쪽 사람이 2개 가지고 있다면 하나 받기
                if(i-1 >= 0 && status[i-1] > 1){
                    status[i]++;
                    status[i-1]--;
                    continue;
                }
                // 오른쪽 사람이 2개 가지고 있다면 하나 받기
                if(i+1 < n && status[i+1] > 1){
                    status[i]++;
                    status[i+1]--;
                }
            }
        }

        // 1개 이상 체육복 가지고 있는 사람 카운트
        for(int i = 0; i < status.length; i++){
            if(status[i] > 0)
                answer++;
        }

        return answer;
    }
}

댓글