TIL 20221124 - 143번

hoin_lee·2022년 11월 24일
0

TIL

목록 보기
108/236

오늘 공부

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

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

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


어제는 정말 컨디션이 안 좋아서 거의 눈이 감겼고 이번 주말에 푹 쉬는 게 아닌 이상 계속해서 눈 통증과 목 담은 계속 될 것 같다.
꼭 휴식을 가져서 몸 상태를 회복하자

오늘 알고리즘

1단계 후반으로 오면서 점점 기출문제나 난이도 문제가 나오고 있다.

https://school.programmers.co.kr/learn/courses/30/lessons/42889#
2019년 카카오 블라인드 문제로 풀긴 풀었지만 가장 추천을 많이 받은 풀이보다 코드 진행한 사항이 많고 그로 인해 가장 길게 걸린 문제가 서로 100ms정도 차이가 났다.

내 풀이

function solution(N, stages) {
    let arr = [];
    for(let i=1; i<=N; i++) {
        let allPlayer = stages.filter(v=>v>=i).length
        let stagePlayer = stages.filter(v=>v===i).length
        if(allPlayer===0){
            arr.push(0)
            continue;
        }
        let failureRate = (stagePlayer/allPlayer)
        arr.push(failureRate)
    } 
    let stageFail = [...arr]
    stageFail.sort((a,b)=>b-a);
    const answer = stageFail.map((v,i)=>{
        let stage = 0
        if(arr.indexOf(v)===arr.lastIndexOf(v)) return arr.indexOf(v)+1
        stage = arr.indexOf(v)+1
        arr.splice(arr.indexOf(v),1," ")
        return stage
    })
    return answer
}
  • 먼저 스테이지 마다 실패율이 몇인지 체크하기 위해 for문을 스테이지 만큼 반복하며
  • 각 스테이지마다 allPlayer로 스테이지 층에 도달했거나 클리어하고 지나간 사람을 구한다.
  • stagePlayer로 현재 스테이지에 위치한 사람을 구하고 도달한 사람이 없다면 0을 반환하도록 만든다.
  • 실패율을 계산하여 어레이에 넣은다음 얕은 복사를 통해 원본 손상 없이 정렬을 시킨다.
  • map을 통해 정렬한 값에서 iudexOf를 통해 아까 실패율 계산한 어레이에서 index+1을 통해 몇몇층인지 계산한다.
  • 이 때 indexOF와 lastIndexOf를 통해 값이 하나인지 비교해서 넣도록 하고 중복 값이면 낮은 층부터 정렬하라고 했으니 indexOf를 통해 맨 앞의 값(낮은층)을 넣고 그 값은 splice로 지워버린다.

이렇게 풀었는데 굉장히 길고 하는 작업도 많아 시간적으로 매우 좋지 않다.
다른 사람의 풀이를 보자

function solution(N, stages) {
    let result = [];
    for(let i=1; i<=N; i++){
        let reach = stages.filter((x) => x >= i).length;
        let curr = stages.filter((x) => x === i).length;
        result.push([i, curr/reach]);
    }
    result.sort((a,b) => b[1] - a[1]);
    return result.map((x) => x[0]);
}
  • reach 는 스테이지에 도달한 사람의 수 이고 curr은 도전중인 사람이다.
  • result에 푸쉬 하는데 형태는 [스테이지, 실패율]로 들어가게 된다.
  • 실패율로 sort할 경우 자연스럽게 정렬된다.
  • map을 이용해서 스테이지 이름만 반환하도록 한다

깔끔하고 좋은 풀이다. 2차원 배열을 통해 층과 실패율을 동시에 넣었는데 이 생각을 못했던 이유는 키 밸류 값으로 생각했기 때문이었다.
앞으로 만나는 문제에 2차원 배열을 생각해보자.

profile
https://mo-i-programmers.tistory.com/

0개의 댓글