알고리즘 문제 풀기(프로그래머스)
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
}
이렇게 풀었는데 굉장히 길고 하는 작업도 많아 시간적으로 매우 좋지 않다.
다른 사람의 풀이를 보자
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]);
}
깔끔하고 좋은 풀이다. 2차원 배열을 통해 층과 실패율을 동시에 넣었는데 이 생각을 못했던 이유는 키 밸류 값으로 생각했기 때문이었다.
앞으로 만나는 문제에 2차원 배열을 생각해보자.