본문 바로가기

CS/알고리즘

[230423] 명예의 전당

반응형

 

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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