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

JINSUNG LEE·2021년 8월 2일
0
post-thumbnail
post-custom-banner


function solution(lottos, win_nums) {
    let rank = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5, 1: 6}
    
    let max = 0;
    let min = 0;
    let zero = 0;

    let result = [];
   
    for(let i = 0; i < lottos.length; i++) {
        if(lottos[i] === 0) {
            zero++
            continue
        }
        for(let j = 0; j < win_nums.length; j++) {
            if(lottos[i] === win_nums[j]) {
                max++
                min++
            }
        }
    }
    
    let maxSum = max + zero
    
    if(maxSum >= 6) {
       maxSum = rank["6"]
    } else if(maxSum <= 1) {
       maxSum = rank["1"]
    } else {
       maxSum = rank[maxSum]
    }
    
    if(min >= 6) {
       min = rank["6"]
    } else if(min <= 1) {
       min = rank["1"]
    } else {
       min = rank[min]
    }
        
    return [maxSum, min]
    
}

알고리즘 설명란이 너무 길어서 당황스러웠지만, 다 읽어보니 로직은 상당히 간단한 알고리즘이다.

코드를 구현하면서 점점 길어질수록 느꼈다.

"와나.. 이거 분명 이렇게 길게 안나올 알고리즘일텐데.."

중첩 반복문에 조건문 중복으로 쓰이면서 너무 지저분하지만, 알고리즘이 풀리긴 풀렸다.

모범답안



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]];
}

모범답안 보자마자 "와 진짜 쉽게 푸셨네" 라는 말이 나왔다.

생각해보니 최저순위 갯수와 지워진 로또 번호 0을 합치면 최고 순위 갯수인데

해당 수식을 생각치 못하였다.

profile
https://californialuv.github.io/Tech_Blog 이사 갔어용 🌎 🚀
post-custom-banner

0개의 댓글