프로그래머스: 실패율

송유나·2021년 1월 22일
0

프로그래머스: 2019 KAKAO BLIND RECRUITMENT>실패율
카카오가 붙어있어서 풀기도 전에 쫄았다..ㅠㅠ
하지만 이제 프로그래머스 level1에서는 카카오나 챌린지 문제 밖에 없기 때문에 풀어야 한다😭😭
😎그래도 풀었긴 함!! 한...3시간쯤 걸려서요...

1. 문제

  • 정리: 게임 스테이지마다 실패율을 계산한 후 내림차순으로 반환하기

  • 문제를 천천히 읽으면서 이해해야 한다!


2. 해결과정

🌈 간단!

  1. 실패율을 구한다.
  2. 내림차순으로 정렬한다..

매우 간단하지만 코드 작성과정은 그렇지 못했음. 푸는 과정에서 접근 방법도 많이 바꾸며 삽질 여러번 했음 ㅠㅠ

  1. 문제를 잘못 이해해서....실패율 구하는 과정에서 시간을 많이 버려버림 ㅜㅜ
  2. 내림차순 할 때 스테이지를 어떻게 return 할 것인지 고뇌에 빠짐: keyvalue값을 주기로 함.
  3. 이제 keyvalue에 어떻게 접근해야할 지 고뇌에 빠짐: 내림차순 정렬 하기위해서 혼자 이것저것 해보다가 결국 구글검색함(매우 간단했음)
  4. 코드 다듬어주기: 일단 구현을 목적으로 짠 코드라서 for문이 두개가 되었고, 코드가 매우 길었기 때문에 for문을 합쳐주고! 불필요한 부분 떼내고 다듬어 줬음(이 작업하면서 통과했던 테스트케이스가 안돌아가고..ㅎ..계속 수정의 반복..)

3. 코드

// 2019 KAKAO BLIND RECRUITMENT

function solution(N, stages) {
    var answer = [];
    var fail = [];
    var now = [];
    var result = [];
    var fail_count = 0;
    var now_count = 0;
    
    for(var i=0; i<N; i++){		//실패율 구해서 result 배열에 담는다
        stages.map(num =>{
            if(num==i+1) fail_count += 1;
            if(num>=i+1) now_count += 1;
        })
        fail.push(fail_count);		//스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
        now.push(now_count);		//스테이지에 도달한 플레이어 수
        fail_count = 0;
        now_count = 0;
        result.push({fail:fail[i]/now[i],stage:i+1})	//실패율 계산해서 result에 담는다
    }//1️⃣console.log(result)
  
    result.sort((a,b)=>b.fail-a.fail).map(n=>answer.push(n.stage))
  //👆result를 내림차순 정렬 한 다음에 차례로 result.stage의 value를 answer에 담는다
    
    return answer;
}
  • if(num==i+1) fail_count += 1;: 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
  • if(num>=i+1) now_count += 1;: 스테이지에 도달한 플레이어 수

👉실패율: 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

  • //1️⃣console.log(result)의 결과
  • result.sort((a,b)=>b.fail-a.fail): 배열안의 value에 접근해서 내림차순 정렬하는 코드

4. 후기

  • 풀 때는 힘들었는데 정리하면서 보니까 새로운 메소드를 사용한 것도 아니고, 푸는 과정이 복잡한 것도 아니다ㅠㅠ 그런데 풀 때는 왜케 어려웠던 것인지ㅜㅜ
profile
개발자를 꿈꾸는 햇병아리입니다.

0개의 댓글