본문 바로가기
개발/알고리즘

[프로그래머스][Javascript] 체육복

by JeonJaewon 2021. 4. 25.

 

  • 첫 번째 for문으로 문제에서 주어진 조건대로 체육복의 개수를 저장한다. reserve와 lost에 모두 들어있는 경우도 생각해야 한다.

 

  • 두 번째 for문으로 최대한 많은 사람이 체육복을 입을 수 있도록 처리한다. 체육복이 2개이고 앞사람이 체육복이 없는 경우만 체육복을 전달한다. 그 후 뒷사람도 동일한 코드를 반복한다. 문제 조건 상 인접한 앞, 뒷사람에게만 체육복을 나눠줄 수 있다. 이 조건이 바로 이 문제를 greedy하게 풀어도 되는 조건이다.

 

  • 체육복이 0이 아닌 사람의 수를 계산하면 끝~

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function solution(n, lost, reserve) {
    let arr = [];
    for (let i = 0; i < n; i++) {
        let cloth = 1;
        if (reserve.includes(i+1)) {
            cloth = 2;
        }
        if (lost.includes(i+1)) {
            cloth--;
        }
        arr.push(cloth);
    }
    for (let i = 0; i < n; i++) {
        if (arr[i] == 2) {
            if (i-1 >= 0 && arr[i-1]==0) {
                arr[i-1]++;
                arr[i]--;
            }
        }
        if (arr[i] == 2) {
            if (i+1 < n && arr[i+1]==0) {
                arr[i+1]++;
                arr[i]--;
            }
        }
    }
    var answer = 0;
    arr.forEach((elem) => {
        if (elem != 0) {
            answer++;
        }
    })
    return answer;
}
cs

 

 

 

댓글