코딩테스트 - 로또의 최고 순위와 최저 순위

허원영·2022년 1월 18일
1
post-thumbnail

프로그래머스 2021 Dev-Matching 문제

레벨: 1

언어: JavaScript


문제보러가기

간단한 문제 설명

6자리 로또 번호와 그리고 몇 자리가 지워진 6자리 번호가 있다.
지워진 번호를 임의로 채워서 최고로 받을 수 있는 순위와 최저로 받을 수 있는 순위 구하기
자세한 설명은 위 링크 참고!

입력값

  • lottos: 0이상 45이하의 원소를 가지는 길이 6의 정수 배열, 지워진 값은 0으로 들어옴
  • win_nums: 1이상 45이하의 원소를 가지는 길이 6의 정수 배열

출력값

  • 최고순위와 최저순위 순으로 정수가 저장된 배열

📑풀이과정

일단 lottoswin_nums의 같은 값의 개수가 몇 개인지 찾는다. 찾은 수는 지워진 부분이 모두 틀렸을 때와 같으니 최저 순위를 판별할 수 있고 지워진 부분이 모두 맞은 때가 최고 순위이니 지워진 부분(숫자 0)의 개수를 더하면 최고 순위가 된다.

  • 최저순위: 두 배열의 같은 숫자 개수
  • 최고순위: 두 배열의 같은 숫자 개수 + 0의 개수

📋풀이코드

function solution(lottos, win_nums) {
  const answer = [];
  let win_counter = 0;
  let zero_counter = 0
  const win_ranking= [6,6,5,4,3,2,1]  

  lottos.map((num)=>{
    if(num===0){
      zero_counter++
    }else{
      win_nums.map((win_num)=>{
        if(num===win_num){
          win_counter++
        }
      })
    }
  })

  answer[0] = win_ranking[win_counter + zero_counter] 
  answer[1] = win_ranking[win_counter]

  return answer;
}

💻 코드 라인별 풀이

간단한 변수 선언부분은 패스한다.

const win_ranking= [6,6,5,4,3,2,1]

계산하여 나온 수를 로또의 순위로 바꾸기 위한 배열

lottos.map((num)=>{
    if(num===0){
      zero_counter++
    }else{
      win_nums.map((win_num)=>{
        if(num===win_num){
          win_counter++
        }
      })
    }
  })

map 함수를 사용하여 0이면 zero_counter에 +1하고 아니면 win_nums에서 찾은 숫자가 있는지 확인하여 win_counter +1한다.

👍다른 사람 풀이

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

    let minCount = lottos.filter(v => win_nums.includes(v)).length;
    let zeroCount = lottos.filter(v => !v).length;

    const maxCount = minCount + zeroCount;

    return [rank[maxCount], rank[minCount]];
}

filter를 사용하여 보기 좋고 깔끔하게 구현되어 있길래 가져왔다.
이분의 코드를 맵을 2중으로 사용한 부분을 includes를 사용하면 더 깔끔하게 코드를 작성할 수 있겠다는 생각이 들었다.

profile
1년차 개발자

0개의 댓글