javascript/프로그래머스

[코딩테스트 연습]level 1. 체육복

sewonzzang123 2022. 7. 7.
반응형

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

 

코딩테스트 연습 - 체육복

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

programmers.co.kr


 

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;
}

 

전체 학생의 수 만큼 for문을 돌면서 학생 object에 1씩을 넣어주었다.

 

lost(잃어버린 학생)의 array를 조회하며 학생 object의 key에 -1을 해 주었다.

반대로 reserve(여벌이 있는 학생)의 array를 조회하며 학생 object의 key에 +1을 해 주었다.

 

그다음 for 문을 조회하며

각각의 학생이 여분이 있는 경우면서(2) 앞의 학생과 뒤의 학생이 체육복을 잃어버린 상태라면(0) 체육복을 전달해 주는 방식으로 구현하였고,

마지막으로는 key의 체육복의 수(value) 가 1보다 큰 경우에는 체육복이 있다는 것으로 판별하여 answer을 +1 해주었다.

 

 

 

 

 

 

반응형

댓글