Study/알고리즘

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

ujam 2022. 3. 23. 22:05
728x90
반응형

 

문제

 

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

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 

 

 

 

 

풀이

function solution(lottos, win_nums) {
    var answer = [];
    let count = 0;
    let countAdd = 0;
    let rank = 0;
    let lottosSort = lottos.sort((a,b) => {return b-a});
    let winNumsSort = win_nums.sort((a,b) => {return b-a});
    
    const rankValid = () => {
        if(count === 6) return rank = 1;
        else if(count === 5) return rank = 2;
        else if(count === 4) return rank = 3;
        else if(count === 3) return rank = 4;
        else if(count === 2) return rank = 5;
        else return rank = 6;
    }
    
    if(lottosSort.find(ele => ele === 0) === 0) {
        if(lottosSort.find(ele => ele !== 0)) {
            for(let i = 0; i < 6; i++) {
               if(winNumsSort.find(ele => ele === lottosSort[i])) {
                   // console.log(count);
                    winNumsSort.splice(i,1);
                    count++;
               } else {
                   if(lottosSort[i] === 0) {
                       countAdd++;
                   }
               }
            }
        rankValid();
        answer.push(rank);
        count += countAdd;
        rankValid();
        answer.splice(0,0,rank);
        rank = 0;
        count = 0;
        } else {
            answer.push(1,6);
        }
    } else {
        for(let i =0; i < 6; i++){
            if(lottosSort[i] === winNumsSort[i]) {
                count++;    
            }
        }
        rankValid();
        answer.push(rank, rank);
        rank = 0;
    }
    return answer;
}

[내 풀이]

 

 

 

 

 

 

function solution(lottos, win_nums) {
    var answer = [];
    
    const correct = lottos.filter(lotto => win_nums.includes(lotto)).length;
    
    const test = lottos.filter(ele => ele)
    
    const zeros = lottos.filter(lotto => lotto === 0).length;
    console.log(correct, zeros);
    
    let min = 7-correct >= 6 ? 6 : 7-correct;
    let max = min-zeros < 1 ? 1 : min-zeros;
    
    answer = [max, min]
    return answer;
}

[다른분의 풀이]

 

 

 

 

 

 

 

문제를 풀면서도 이것은 이상적인 풀이가 아님을 너무나도 알 수 있었습니다 (제일 위험하고 안 좋은 징조)


다른 분의 풀이와 비교해보니 감탄을 금치 못 했고 제 풀이는 너무나도 초라했습니다


꾸준한 알고리즘 풀이로 사고력을 증진시켜야겠다는 생각이 더욱 많이 들었습니다

 

728x90
반응형