반응형
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
내 풀이
function solution(k, score) {
const answer = [];
for(let i = 1; i <= score.length; i++) {
if(i < k) {
answer.push(Math.min(...score.slice(0, i)))
} else {
const sortedScore = score.slice(0, i).sort((a, b) => b - a);
answer.push(sortedScore[k - 1])
}
}
return answer
}
배열 answer의 크기가 k만큼 찰 때까지, score를 0부터 i 만큼 자른 배열 요소 중 가장 작은 값을 answer에 넣는다.
k보다 커지면, score를 자른 배열을 내림차순으로 정렬하고, 그 배열의 k-1 번째 인덱스에 해당하는 값을 answer에 넣는다.
아래는 각 for문의 끝에서 sortedScore와 answer를 각각 콘솔한 것이다.
k보다 크기가 작은 경우에는 가장 작은 값을 answer로 가져오고, k보다 커지면 정렬한 값에서 k-1 번째 값을 answer에 넣는다.
테케 결과
다른 풀이
function solution(k, score) {
const stack = []
return score.reduce((a,c) => {
if(stack.length < k) {
stack.push(c)
stack.sort((a,b) => a - b)
}
else {
stack.push(c)
stack.sort((a,b) => a - b)
stack.shift()
}
a.push(stack[0])
return a
},[])
}
스택의 성질을 이용하여 잘 풀이한 것 같다.
하지만 shift()는 좋지 않다고 들었기 때문에, 차라리 내림차순으로 정렬하고 stack.pop()를 한 후 a.push(stack[k-1]) 를 하는 것도 좋을 것 같다는 생각이 들었다.
반응형
'CS > 알고리즘' 카테고리의 다른 글
[230423] 소수 만들기 (0) | 2023.04.23 |
---|---|
[230423] 연속 부분 수열 합의 개수 (0) | 2023.04.23 |
[230422] 기능개발 (0) | 2023.04.22 |
[230422] 소수 찾기 (0) | 2023.04.22 |
[230422] 추억 점수 (0) | 2023.04.22 |