본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 로또의 최고 순위와 최저 순위 (JavaScript)

by gardenii 2023. 6. 20.

[프로그래머스] 로또의 최고 순위와 최저 순위 (JavaScript)

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. includes() 사용 풀이 (풀이 참고)

function solution(lottos, win_nums) {
  let rank = [6, 6, 5, 4, 3, 2, 1];

  let zero = 0, match = 0;
  lottos.forEach((e) => {
    if (e === 0) zero++;
    else if (win_nums.includes(e)) match++;
  });

  return [rank[match + zero], rank[match]];
}

코드 해설

- 순위를 뜻하는 배열 rank를 생성해줍니다.

- 0에는 어떤 수가 들어가도 되므로 각각 0개수를 뜻하는 zero변수와 일치하는 숫자 개수를 뜻하는 match변수를 생성하고 초기값 0을 할당합니다.

- lottos배열을 forEach로 순회하면서, e가 0일 경우 zero++

- win_nums가 e를 포함하면 match++를 해줍니다.

- match+zero를 더한 값은 최대로 많이 맞힌 것을 의미하므로 rank의 인덱스에 넣어서 출력해주고 match만 맞힌 경우 최소로 맞힌 것을 의미하므로 rank[match]하여 둘을 배열 형태로 반환해줍니다.

2. if - else 사용 풀이

  function solution(lottos, win_nums) {
    let highestRank = 1;
    let lowestRank = 7;
    let zeroCount = 0;
    let matchCount = 0;

    lottos.forEach((num) => {
      if (num === 0) zeroCount++;
      else if (win_nums.includes(num)) matchCount++;
    });

    if (zeroCount === 6) return [highestRank, lowestRank - 1];
    else if (matchCount === 0) return [lowestRank - 1, lowestRank - 1];

    return [lowestRank - (matchCount + zeroCount), lowestRank - matchCount];
  }

코드 해설

- 처음 풀었던 코드

- 1번 풀이와 크게 다르지 않지만 if, else if 를 통해 모두 0인 경우, 모두 틀린 경우에 한번 더 예외처리를 해 주는 것이 다른 점입니다.

- 또한 마지막 return문에서도 순위를 출력하기 위해 각각 값을 빼줍니다.

3. filter() 사용 풀이 (ChatGPT 참고)

  function solution(lottos, win_nums) {
    const rank = [6, 6, 5, 4, 3, 2, 1]; 

    let matchCount = lottos.filter(num => win_nums.includes(num)).length;
    let unknownCount = lottos.filter(num => num === 0).length;

    const maxRank = matchCount + unknownCount;
    const minRank = matchCount;

    return [rank[maxRank], rank[minRank]];
}

코드 해설

- 1번과 같이 rank를 저장한 배열을 먼저 생성해줍니다.

- filter를 통해 lottos의 win_nums에 포함된 num만 넣어 반환해주고, 이 길이를 구해 matchCount 변수에 저장합니다.

- 마찬가지로 filter를 통해 0인 num만 넣어 반환된 배열 길이를 unknownCount 변수에 저장합니다.

- maxRank는 맞힌숫자와 0인 숫가 갯수를 합한 값, minRank에는 맞힌 숫자만 저장합니다.

- rank배열에 각각 maxRank, minRank를 인덱스로 넣어 반환해줍니다.