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

Song-Minhyung·2022년 6월 5일
0

Problem Solving

목록 보기
8/50
post-thumbnail

문제

https://programmers.co.kr/learn/courses/30/lessons/77484

  • 민우 동생이 로또에 낙서를해서 로또 번호 확인을 못한다고 한다.
  • 입력에는 0이 포함되는데 0은 어떤 숫자도 될 수 있다 (조커카드)
  • 만약 0이 다른수가 될 때 최고순위와 최저순위를 출력하면 된다.

입력: lottos, win_nums가 매개변수로 입력된다.

  • lottos:
    • 6자리 배열
    • 0 ~ 45의 정수가 입력됨
    • 0은 여러개 입력 가능 but, 나머지는 1개만 입력됨
    • 원소는 정렬돼 있지 않을 수 있음
  • win_nums:
    • 6자리 배열
    • 1 ~ 45의 정수가 입력됨
    • 중복되는 숫자가 없음
    • 원소는 정렬돼 있지 않을 수 있음

출력:
[최고순위, 최저순위]
를 출력한다.

풀이방법

이번 문제는 프로그래머스 기준 Level 1문제다.
그래서 큰 어려움 없이 간단하게 풀 수 있었지만 반례 하나를 생각 못해서 시간이 조금 더 걸렸다.

function solution(lottos, win_nums) {
	// 정답과 일치하는 갯수
  let correctCnt = 0;
	// 0의 갯수
  let zeroCnt = 0;
	// 최저 순위
  let minRank = 0;
	// 최고순위
  let maxRank = 0;

  lottos.forEach (v => {
      if (win_nums.includes(v)) {
          correctCnt ++;
      }
      if (v === 0) {
          zeroCnt ++;
      }
  });
  minRank = Math.abs(correctCnt - 7);
  maxRank = minRank - zeroCnt;

  minRank = minRank > 6 ? 6 : minRank;
  maxRank = maxRank > 6 ? 6 : maxRank;
  
  return [ maxRank, minRank ];
}

여기서 중요한 부분은 lottos의 forEach를 돌고나서
minRank, maxRank를 재할당 하는 부분이다.
minRank는 0 ~ 6까지 나올 수 있다. 그래서 | minRank - 7 |을 하면 최저순위가 된다.
maxRank는 그냥 최저순위에 0의 갯수를 더해주면 된다.

반례는 minRank와 maxRank가 7이되는 경우에 생기게 된다.
그래서 삼항연사자로 처리를 해줬다.

profile
기록하는 블로그

0개의 댓글