⚡문제정보
레벨 2 치고는 꽤 쉬운 느낌이었습니다.
귤을 수확해서 박스에 담을 건데 한 박스에 담을 귤의 크기차이가 최대한 적었으면 좋겠다는 내용
Map에다가 각 사이즈를 담아주면 쉽게 풀 수 있을 것 같아서 간단히 구현했tmqslek.
🔍접근방법
귤을 크기별로 Map에 담아준다.
Map을 value기준으로 정렬하고 slice()와 reduce()를 이용해서 답을 찾는다.
🔍나의 풀이
function solution(k, tangerine) {
let map = new Map()
let answer = 0
for(i=0; i<tangerine.length; i++) {
map.set(tangerine[i], map.get(tangerine[i]) +1 || 0 +1 )
}
let sorter = [...map.values()].sort((a,b) => b - a)
for(i=1; i<sorter.length+1; i++) {
answer++
let check = sorter.slice(0,i).reduce((acc,cur) => acc + cur)
if(check>=k) return answer
}
return answer
}
첫번째 풀이
근데 원소의 최대크기가 너무 방대하다보니 시간초과에 걸러져버렸습니다.
아무래도 매번 slice하고 reduce하는 방식이 너무 비효율적인 것 같네요
사실 slice할 필요 없는데 괜히 다르게 해보려다가 실패함
🔍나의 두번째 풀이
function solution(k, tangerine) {
let map = new Map()
let counter = 0
let answer = 0
for(i=0; i<tangerine.length; i++) {
map.set(tangerine[i], map.get(tangerine[i]) +1 || 0 +1 )
}
let sorter = [...map.values()].sort((a,b) => b - a)
for(i=0; i<sorter.length; i++) {
counter += sorter[i]
answer++
if(counter >= k) return answer
}
return answer
}
사실 sorter 부분에서 이미 내림차순으로 정렬된 밸류를 얻었기 때문에
slice()할 필요가 전혀 없었으니까
그냥 sorter를 순회하면서 답을 찾으면 됐습니다.
설명은 아래에 적어둘게요
function solution(k, tangerine) {
let map = new Map()
// 크기별 귤갯수를 세어줄 Map 선언
let counter = 0
// counter가 k와 같거나 크면 답을 리턴해줄것임
let answer = 0
// 등장한 귤 갯수를 세어줄 answer , but i+1로 대체가능
for(i=0; i<tangerine.length; i++) {
map.set(tangerine[i], map.get(tangerine[i]) +1 || 0 +1 )
}
// tangerine 배열을 순회하면서 귤 갯수를 세어주고 저장함
let sorter = [...map.values()].sort((a,b) => b - a)
// map의 밸류값만 담아서 배열로 전개한 뒤 내림차순으로 정렬
for(i=0; i<sorter.length; i++) {
counter += sorter[i]
//counter에 sorter[i]값을 담아줌
answer++
//담은 귤의 종류갯수를 올려줌
if(counter >= k) return answer
//만약 counter가 k와 같거나 크다면 answer를 리턴
}
return answer
}
풀고나서 생각난 건데 answer 변수를 선언할 필요없이
그냥 i+1을 리턴해도 문제없이 동작합니다.
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 0] 가장 가까운 같은 글자 Javascript (0) | 2022.12.17 |
---|---|
[Programmers Level 1 탐욕법] 체육복 Javascript (0) | 2022.12.16 |
[Programmers Level 0] 다항식 구하기 Javascript (0) | 2022.12.15 |
[Programmers Level 1] 신고 결과 받기 Javascript (0) | 2022.12.14 |
[Programmers Level 1] 숫자 짝꿍 Javascript (0) | 2022.12.14 |