[프로그래머스] 명예의 전당 (1)

2022. 12. 19. 21:13기록/Programmers

    목차

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/138477

 

프로그래머스

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

programmers.co.kr


나의 문제 풀이

function solution(k, score) {
  const answer = [];
  const stack = [];

  for (let i = 0; i < score.length; i++) {
    if (stack.length < k) {
      stack.push(score[i]);
    } else {
      if (score[i] > Math.min(...stack)) {
        stack.pop();
        stack.push(score[i]);
      }
    }
    stack.sort((a, b) => b - a);
    answer.push(stack[stack.length - 1]);
  }
  return answer;
}
  • 스택의 길이가 k 보다 작을 경우
    • 스택에 현재 점수 넣기
  • 스택의 길이가 k 보다 크거나 같을 경우
    • 스택에서 최소 점수보다 현재 점수가 클 경우
      • 스택에서 최소 점수 삭제
      • 밑에서 내림차순 정렬을 한 상태에기 때문에 스택의 마지막 값은 최소 점수임
      • 스택에 현재 점수 넣기
  • 스택의 요소들을 내림차순으로 정렬
  • 스택의 마지막 값인 최소 점수를 정답 배열에 할당

다른 사람의 문제 풀이

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;
    },[])
}
function solution(k, score) {
    var temp = [];
    let answer = [];

    score.forEach(el => {
        temp.push(el);
        temp.sort((a, b) => b - a);
        if(k < temp.length)
            answer.push(temp[k - 1]);
        else
            answer.push(temp[temp.length - 1]);
    })
    return answer;
}