티스토리 뷰

반응형

 

프로그래머스 - 로또의 최고 순위와 최저 순위

 

문제는 위 링크에서 볼 수 있다. 문제에 대한 해설보다는 기억하고 싶은 개념, 사고, 문법을 기록하는 글이다. 

답안은 맨 아래에 표기해 두었다.

 

프로그래머스 1단계부터 풀어보았다. 그래서인지 풀 수는 있었지만, 난 아직 많이 부족하기 때문에 오래 걸리긴 했다.

결국에 풀었던 코드도 괜찮다고 생각했는데 답안 제출 후 상위에 있는 풀이를 보는데 저번에 공부했던 filter()를 이용한 간단한 풀이라 또 배웠다. 

 


 

접근방법

1. lottos에서 0의 개수와 win_nums와 매치되는 숫자의 개수를 변수를 지정해 뽑았다. -  zeroCount, matchCount

문제를 보고 리턴 값에 최대 랭크와 최소 랭크로 출력해야 해서 최대, 최소 링크를 어떻게 구할지 고민했다. 

 

순위 = 6 - 맞은개수 + 1 이므로 7 - 맞은개수라고 말할 수 있다. 

우선 최대 랭크는 0의 개수가 모두 당첨일 경우이므로 matchCount + zeroCount이고,

최저 랭크는 0의 개수가 모두 당첨되지 않았을 경우이므로 7 - 맞은 개수 가 되겠다. 

 

다만  matchCount나  zeroCount  0인 경우 (당첨이 하나도 되지 않거나, 0의 개수가 없는 경우) 에는 

7 - 맞은 개수(0) = 7 이 되므로 삼항 연산자를 써서 6이라는 랭크를 넣어주면 된다. 

 

마찬가지로 matchCount에만 영향을 받는 최저 랭크에도 matchCount가 하나도 없을 경우 6등을 넣어주면 된다. 

 

  const maxRank =
    zeroCount === 0 && matchCount === 0 ? 6 : 7 - (zeroCount + matchCount);

  const minRank = matchCount === 0 ? 6 : 7 - matchCount;

 

 


 

제출 답안 

 

function solution(lottos, win_nums) {
  const answer = [];
  let zeroCount = 0;
  let matchCount = 0;

  for (let num of lottos) {
    if (num === 0) {
      zeroCount++;
    }
    if (win_nums.includes(num)) {
      matchCount++;
    }
  }
  
  const maxRank =
    zeroCount === 0 && matchCount === 0 ? 6 : 7 - (zeroCount + matchCount);

  const minRank = matchCount === 0 ? 6 : 7 - matchCount;

  answer.push(maxRank, minRank);

  return answer;
}

 

반응형