프린세스 다이어리

[프로그래머스] 로또의 최고 순위와 최저 순위 - 자바스크립트 본문

자료구조, 알고리즘

[프로그래머스] 로또의 최고 순위와 최저 순위 - 자바스크립트

개발공주 2021. 11. 27. 23:16
728x90

 

1. 접근 방법

 

(1) lottos에서 win_nums랑 일치하는 숫자의 갯수가 n이라면, 최소 정답은 n개, 최대 정답은 n + (0의 갯수)다.

 

(2) 0의 갯수 구하기

const numOfZeros = lottos.filter(lotto => lotto === 0).length;

 

(3) 최소, 최대 정답 수 구하기

    let minCorrect = 0;
    for (let i = 0; i < lottos.length; i++) {
        if (win_nums.includes(lottos[i])) {
            minCorrect++;
        }
    }
    let maxCorrect = minCorrect + numOfZeros;

 

(4) 로또순위 계산 로직 작성

const setGrade = (corrects) => {
    if (corrects >= 6) {
        return 1;
    } else if (corrects <= 1) {
        return 6;
    } else {
        return 7 - corrects;
    }
}

 

(5) 최대, 최소 일치 갯수로 로또순위 계산하여 정답 리턴

return [setGrade(maxCorrect), setGrade(minCorrect)];

 

2. 해답

const setGrade = (corrects) => {
    if (corrects >= 6) {
        return 1;
    } else if (corrects <= 1) {
        return 6;
    } else {
        return 7 - corrects;
    }
}

function solution(lottos, win_nums) {
    if (lottos.sort() == win_nums.sort()) return [1, 1];
    
    // 1. lottos에서 0의 개수 세기.
    const numOfZeros = lottos.filter(lotto => lotto === 0).length;
    
    // 2. lottos 하나씩 돌면서 최소 결과 구하기
    let minCorrect = 0;
    for (let i = 0; i < lottos.length; i++) {
        if (win_nums.includes(lottos[i])) {
            minCorrect++;
        }
    }
    
    // 3. 최대 결과 구하기
    let maxCorrect = minCorrect + numOfZeros; 
    
    return [setGrade(maxCorrect), setGrade(minCorrect)]; 
}

소감: 난 이렇게까지 구구절절해야 하나ㅎ

728x90
Comments