[JavaScript][Programmers] 로또의 최고 순위와 최저 순위

조준형·2021년 7월 1일
0

Algorithm

목록 보기
6/142
post-thumbnail

🔎 로또의 최고 순위와 최저 순위

❓ 문제링크

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

📄 제출 코드

function solution(lottos, win_nums) {
    var answer = '';

    let countZero = lottos.filter(x => 0 == x).length;
    let count = lottos.filter(x => win_nums.includes(x)).length;

    let big = count + countZero;
    let small = count;

    let result = {
        0: 6,
        1: 6,
        2: 5,
        3: 4,
        4: 3,
        5: 2,
        6: 1,
    };
    
    big = result[big];
    small = result[small];

    let rank = [];

    rank.push(big);
    rank.push(small);

    answer = rank
    return answer
}

0의 갯수와 두 개 배열을 비교해서 일치하는 갯수를 세고,
갯수에 따라 최대인 경우는 일치하는거 + 0의 갯수, 최소인 경우는 그냥 일치하는 갯수.
그래서 그 갯수에 따라 등수를 나눔.

주의 출력시 그냥 console.log('${big} ${small}')했다가 틀렸다고 나옴.
배열에 넣어서 그 배열을 그대로 출력하니 성공.

🎲 리팩토링

📄 초기 코드

function solution(lottos, win_nums) {
    var answer = [];
    let count = 0;
    let countZero = 0;
    for (var i = 0; i < 6; i++){
        if (lottos[i] == 0) {
            countZero++;
            continue;
        }
        for(var j=0;j<6;j++){
            if(lottos[i] == win_nums[j]){
                count++;
            }
        }
    }
    // console.log('count : ' + count);
    // console.log('countZero : ' + countZero);
    let rank=0;
    let big = count + countZero;
    // console.log('big : ' + big);
    switch (big) {
        case 1: rank = 6; break;
        case 2: rank = 5; break;
        case 3: rank = 4; break;
        case 4: rank = 3; break;
        case 5: rank = 2; break;
        case 6: rank = 1; break;
        default: rank = 6; break;
    }
    answer.push(rank);
    
    let small = count;
    switch (small) {
        case 1: rank = 6; break;
        case 2: rank = 5; break;
        case 3: rank = 4; break;
        case 4: rank = 3; break;
        case 5: rank = 2; break;
        case 6: rank = 1; break;
        default: rank = 6;
    }
    answer.push(rank);
    
    return answer;
}

👉 1. 두 배열 비교.

filter()를 활용하여 두 배열에서 일치하는 것을 가져와 그 길이를 세서
반복문을 filter 한 줄로 변경.

 let countZero = lottos.filter(x => 0 == x).length;
 let count = lottos.filter(x => win_nums.includes(x)).length;

👉 2. dictionary 활용

switch문으로 등급 나누던 작업을 dictionary를 이용하여 변경.
key와 value를 저장하여 해당 key에대한 value(등수)를 저장함.

let result = {
        0: 6,
        1: 6,
        2: 5,
        3: 4,
        4: 3,
        5: 2,
        6: 1,
    };
    
    big = result[big];
    small = result[small];
profile
깃허브 : github.com/JuneHyung

0개의 댓글