TIL 20221210 - 156번

hoin_lee·2022년 12월 11일
0

TIL

목록 보기
121/236

오늘 공부

알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm

JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS

React 강의 듣기
https://github.com/hoinlee-moi/React_prac


react강의도 듣고 알고리즘 문제도 풀고 영화도 보고^^
물론 매일 하겠다는 모든 목표를 이루고 있지는 않다.
처음부터 스케줄 생각 안하고 무조건 하겠다 하고 무리해서 짠 계획이니 다 이룰거란 생각은 안했지만 적어도 매일매일 공부하자는 지키고 있는 중이다.

오늘알고리즘

명예의 전당 https://school.programmers.co.kr/learn/courses/30/lessons/138477

function solution(k, score) {
    var answer = [];
    let fame = [];
    for(let i=0;i<=score.length-1;i++){
        if(i<k){
            fame.push(score[i])
        }else{
            if(score[i]>Math.min(...fame)&&score[i]<Math.max(...fame)||score[i]>=Math.max(...fame)){
                fame.shift()
                fame.push(score[i])
            }
        }
        fame.sort((a,b)=>a-b)
        answer.push(Math.min(...fame))
    }
    return answer;
}

언뜻 굉장히 어렵게 푼 것 같기도 하고 조건 식도 많은 것 같긴 하다.
한번의 반복문을 이용하여 풀었고

  • k만큼은 무조건 명예의 전당에 올라가야 하니 ik보다 작을 땐 모두 fame에 넣었다
  • 이후 점수가 가장 큰 값부터 k번째까지만 명예의 전당에 올라가니 조건을 걸었다
  • 명예의 전당 안의 점수 중 가장 작은 점수보다 크고 가장 큰 점수보다 작은 수이거나 가장 큰 점수보다 클경우에 명예의 전당에서 점수를 하나 빼고 현재 점수를 넣도록 했다.
  • 마지막에 sort로 오름차순으로 놓기 때문에 앞에서 점수를 하나 뺄 때 가장 작은 수가 빠지게 된다.
  • 그리고 정답 배열에 명예의 전당(fame)에서 가장 작은 수를 넣는다.

훨씬 쉬운 풀이가 있었는데 이건 머리를 조금만 더 고민해봤으면 좋았을 것 같다.

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;
}
  • 명예의 전당(temp)과 정답 배열(answer)을 선언
  • score를 반복시켜 temp에 각 원소를 넣는다
  • 원소가 넣어질 때마다 sort로 내림차순 시킨다.
  • temp의 길이가 k보다 클 때(k번의 점수가 모두 올라간 이후)temp배열의 k번째 원소를 answer에 넣어준다.
  • 이는 temp배열을 항상 내림차순 시키기 때문에 앞에서부터 k번째가 명예의 전당 점수이기 때문이다.
  • 아니라면 answertemp의 맨 마지막 숫자를 넣어준다(경연 일수가 k번째가 아닐때)
profile
https://mo-i-programmers.tistory.com/

0개의 댓글