IT/Algorithm

프로그래머스) 체육복

프티 2021. 10. 1. 18:59
반응형

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

 

코딩테스트 연습 - 체육복

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

programmers.co.kr

예전에 통과하지 못하고 다른 사람의 풀이를 보았던 문제이다.

 

지금이라면 풀 수 있을까 하여 다시 풀어보았고,

통과하였다!

 

function solution(n, lost, reserve) {
    const lostFilterdAndSorted = lost.filter(number => !reserve.includes(number)).sort();
    const reserveFilteredAndSorted = reserve.filter(number => !lost.includes(number)).sort();
    
    let answer;
    
    for (let i = 0; i < lostFilterdAndSorted.length; i++) {
        for (let j = 0; j < reserveFilteredAndSorted.length; j++) {
            if (Math.abs(lostFilterdAndSorted[i] - reserveFilteredAndSorted[j]) === 1) {
                lostFilterdAndSorted.splice(i, 1);
                reserveFilteredAndSorted.splice(j, 1);
                i -= 1;
                
                break;
            }
        }
        
        if (!reserveFilteredAndSorted.length) {
            break;
        }
    }
    
    return answer = n - lostFilterdAndSorted.length;
}

 

먼저 lost와 reserve 리스트에 모두 포함되어 있는 요소를 filter로 없앴다.

 

그리고 sort하여 크기 순으로 나열했고,

반복문을 활용하여 값의 차이가 1인 경우 리스트에서 제거하는 식이다.

 

reserve의 길이가 0일 때 lost를 순회하지 않도록 하여 리소스 낭비를 하지 않도록 했다.

 

반복문이 끝나면 answer에 총 인원 n에서 lost의 길이를 빼주어 정답을 리턴했다.

반응형

'IT > Algorithm' 카테고리의 다른 글

프로그래머스) [1차] 다트 게임  (0) 2021.10.06
Merge sort  (0) 2021.10.02
프로그래머스) 최소 직사각형  (0) 2021.10.01
프로그래머스) 숫자 문자열과 영단어  (0) 2021.10.01
Space Complexity - 공간 복잡도  (0) 2021.10.01