Home 230208_Algorithm | 로또의 최고 순위와 최저 순위(Lv.1)
Post
Cancel

230208_Algorithm | 로또의 최고 순위와 최저 순위(Lv.1)

로또의 최고 순위와 최저 순위 (Lv.1)


문제 설명

  • 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수
  • 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return
  • 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정
  • 알아볼 수 없는 번호를 0으로 표기
순위당첨 내용
16개 번호가 모두 일치
25개 번호가 일치
34개 번호가 일치
43개 번호가 일치
52개 번호가 일치
6(낙첨)그 외


제한사항

  • lottos는 길이 6인 정수 배열
  • lottos의 모든 원소는 0 이상 45 이하인 정수
    • 0은 알아볼 수 없는 숫자
    • 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않음
    • lottos의 원소들은 정렬되어 있지 않을 수도 있음
  • win_nums은 길이 6인 정수 배열
  • win_nums의 모든 원소는 1 이상 45 이하인 정수
    • win_nums에는 같은 숫자가 2개 이상 담겨있지 않음
    • win_nums의 원소들은 정렬되어 있지 않을 수도 있음


입출력 예시


lottoswin_numsresult
[44, 1, 0, 0, 31, 25][31, 10, 45, 1, 6, 19][3, 5]
[0, 0, 0, 0, 0, 0][38, 19, 20, 40, 15, 25][1, 6]
[45, 4, 35, 20, 3, 9][20, 9, 3, 45, 4, 35][1, 1]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//로또 순위 코드
function lotto(num) {
  let rank = 0;
  if (num == 6) {
    return (rank = 1);
  } else if (num == 5) {
    return (rank = 2);
  } else if (num == 4) {
    return (rank = 3);
  } else if (num == 3) {
    return (rank = 4);
  } else if (num == 2) {
    return (rank = 5);
  } else {
    return (rank = 6);
  }
}

//결과 코드
function solution(lottos, win_nums) {
  var answer = [];
  let num1 = 0;
  let num2 = 0;
  for (let i = 0; i < lottos.length; i++) {
    for (let j = 0; j < win_nums.length; j++) {
      if (lottos[i] == win_nums[j]) {
        num1++;
      }
    }
    if (lottos[i] === 0) {
      num2++;
    }
  }

  num2 += num1;
  answer.push(lotto(num1));
  answer.push(lotto(num2));
  return answer.sort((a, b) => a - b);
}




나름 풀이

  • 랭크 먼저 설정(각 점수에 따른 순위)
  • 두개의 배열을 비교
    1. 로또 숫지가 같은 경우
    2. 내가 가진 숫자가 0인 경우
    3. 1번의 결과 + 2번의 결과 = 로또 숫자가 같거나 내가 가진 숫자가 0인 경우
  • 두가지를 각각 answer에 push 해줌


다른 분의 풀이(이해가 잘 되었던 코드 중 제일 간결했던 코드)

1
2
3
4
5
6
7
8
9
10
function solution(lottos, win_nums) {
  const answer = [];
  const min = lottos.filter((n) => win_nums.includes(n)).length;
  const max = lottos.filter((n) => n === 0).length + min;

  max > 1 ? answer.push(7 - max) : answer.push(6);
  min > 1 ? answer.push(7 - min) : answer.push(6);

  return answer;
}


위 풀이에 대한 설명

  • 최소 값 : 로또 번호(win_nums)가 포함되어있는 배열의 개수(length로)를 구함
  • 최대 값 : 최소 값 + 0인 내 숫자의 개수
  • 삼항연산자로 ← 랭크 값은 7-1로 설정, 만약에 최소, 최대 값이 1 이하면 낙첨(6) 도출
This post is licensed under CC BY 4.0 by the author.