본문 바로가기

TIL

[TIL] 2024-02-23 JavaScript Code Kata

오늘의 문제

 

 

 

오늘의 해결한 문제는 다음과 같다.

 

요약하자면 여러 수가 담긴 배열과 골라야할 갯수 k 가 주어질때 주어진 배열에서 각 원소들의 합이 k보다 크거나 같도록 하는 문제이다.

 

문제를 풀기 위해 접근한 방식은 다음과 같다.

 

빈 Map객체를 생성한뒤 Map안에 주어진 배열을 순회돌면서 귤의숫자 => 갯수 의 형태로 담고

 

해당 맵을 배열로 정리시키는데 값들의 크기를 내림차순 정렬한다.

 

정리된 배열의 첫번째부터 누적해 더해가면서 k보다 커졌을때 answer를 반환한다. 

function solution(k, tangerine) {
    var answer = 0;
    let map = new Map();
    
    for(let i = 0; i < tangerine.length; i++) {
        let key = String(tangerine[i]); 
        if(map.has(key)) {
            map.set(key, map.get(key) + 1);
        } else {
            map.set(key, 1);
        }
    }

    let sortedEntries = [...map.entries()].sort((a, b) => b[1] - a[1]);
    let temp = 0;
    for(let i = 0 ; i < sortedEntries.length ; i++){
        temp += parseInt(sortedEntries[i][1]) ;
        answer = i+1;
        if(temp >= k){break;}
    }
    return answer;
}

 

 

꽤나 복잡하지만 직관적으로 작성했다. 아마 코드를 줄이려면 더 줄일 수 있을 듯 하지만 가독성에는 이 방식이 더 좋은듯하다.