알고리즘-로또의 최고 순위와 최저 순위

.·2021년 7월 2일
0

알고리즘

목록 보기
3/21

문제설명

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.
알아볼 수 없는 번호를 0으로 표기하기로 하고 가능한 최고순위, 최저순위구하기.

입출력 예

lottos = [44, 1, 0, 0, 31, 25]
win_nums =[31, 10, 45, 1, 6, 19]
result =[3, 5]

순위 당첨 내용
1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(낙첨) 그 외

내가 생각한 방법

0의 갯수 구하기
일치하는 갯수 구하기
높은순위 = 7 - 일치하는 갯수 - 0의 갯수
낮은순위 = 7 -일치하는 갯수

코드를 짜고나서 확인해보니 test case 중 하나에서 계속 에러가 났다
확인해보니 예외처리를 제대로 해주지 않았다는 것을 발견했다
왜냐하면 하나도 일치하지 않는경우 7으로 등록 되기 때문이었다!!
낮은순위에는 예외처리를 해주었지만 높은순위를 간과했다.

function solution(lottos, win_nums) {
  var answer = [];
  let match = 0;
  let zero = 0;
  for (let x of lottos) {
    if (x === 0) zero++;
    else if (win_nums.includes(x)) match++;
  }

  answer.push(7 - match - zero === 7 ? 6 : 7 - match - zero);
  answer.push(7 - match === 7 ? 6 : 7 - match);

  return answer;
}

더 나은 방법 추가

  1. 등수를 array로 정의하고
  • rank=[6,6,5,4,3,2,1] : 6이 두개인 경우는 0개,1개 맞추는 두가지 모두 6등이기 때문이다
  1. 맞추는 최소갯수와 최대갯수를 인덱스로 이용하는 방법이다
function solution(lottos, win_nums) {
  const answer = [];
  const rank = [6, 6, 5, 4, 3, 2, 1];
  let match = 0;
  let zeroCount = 0;
  for (let x of lottos) {
    if (win_nums.indexOf(x) > -1) match++;
    else if (x === 0) zeroCount++;
  }
  const min = match;
  const max = min + zeroCount;
  answer.push(rank[max]);
  answer.push(rank[min]);

  return answer;
}
profile
Divde & Conquer

0개의 댓글

관련 채용 정보