코테/프로그래머스

체육복 (탐욕법 Lv1/JS)

반응형

코딩테스트 연습 > 탐욕법 > 체육복 Lv1

https://programmers.co.kr/learn/courses/30/lessons/42862?language=javascript 

문제정리

n은 반 인원수

lost는 체육복 잃어버린 학생 번호

reserve 체육복 여벌 있는 학생 번호

 

프로그래머스 코드실행하여 2개 예제는 통과하기는 쉽지만

제출후 채점하기에서 모든 예제에 통과하는게 생각보다 까다롭다.

 

모두 통과하기 위해서는 잃어버린 학생의 번호에서 -1, +1 이 존재해야하고, 다른 잃어버린 학생과 겹치면 안되어야 한다.

이러한 조건을 세세하게 만족 시켜줘야 모두 통과할 수 있다. 레벨1 문제 치곤 좀 까다로웠다.

 

간혹 다른사람이 푼 코드에서 짧고 간결하게 쓴 코드들이 있는데 대부분 모두 통과하지 못하는 부분이 많았다.

아마 테스트 케이스가 추가되기 전이 확실하다.

간결한 코드는 좋지만 무조건 간결하다고 해서 모든 상황을 커버해주지 않을 가능성이 조금은 크다는 것을 느꼈다.

코드

학생들의 수를 객체로 표현하고 키값은 숫자로 해서 체육복을 들고 있는 숫자를 나타내었다.

function solution(n, lost, reserve) {
    const students = {};
    let answer = 0;
    for(let i = 1; i <= n; i++){
        students[i] = 1;
    }
    lost.forEach(number => students[number] -= 1);
    reserve.forEach(number => students[number] += 1);

    for(let i = 1; i <= n; i++){
        if(students[i] === 2 && students[i-1] === 0){
                students[i-1]++;
                students[i]--;
        } else if(students[i] === 2 && students[i+1] === 0){
                students[i+1]++;
                students[i]--;
        }
    }
    for(let key in students){
        if(students[key] >= 1){
            answer++;
        }
    }
    return answer;
}

 

반응형