JavaScript 정리-4 프그 풀이(로또)

Kyoungchan Cho·2022년 12월 22일
0

JS

목록 보기
4/8
post-thumbnail

프로그래머스 풀며 정리(4)

문제 : 2021 Dev-Matching: 웹 백엔드 개발자(상반기) > 로또의 최고 순위와 최저 순위
https://school.programmers.co.kr/learn/courses/30/lessons/77484

본인 풀이

  1. lottos, win_nums의 중복을 제거한 dupDelete 배열을 만듬
  2. 문제의 주어진 배열 (lottos, win_nums)의 중복 개수(duplicateNumber)를 구함
  3. 최저 순위 (2개가 같을 경우 5위, 3개 같으면 4위... 6개가 같으면 1위)를 구하기 위해 getRowRank 함수 구현
  4. 최고 순위를 구하기 위해 중복을 제거한 배열 dupDelete의 요소가 0일 경우 7에서 1씩 감소시키고 duplicateNumber를 빼서 값을 구함. 하지만 최고 순위 6, 최저 순위 6, 일때 result가 7이므로 예외 사항 구현
    가독성은 물론 안좋고 하드 코딩한 느낌의 풀이
function solution(lottos, win_nums) {
    
    const dupDelete = lottos.filter(x => !win_nums.includes(x))
    const duplicateNumber = lottos.length - dupDelete.length
    
    const getRowRank = array => {
        let rowRank = 0;
        
        if(dupDelete.length < 6) {
            rowRank += dupDelete.length + 1
        }
        if(dupDelete.length === 6) {
            rowRank = 6
        }
        return rowRank
    }
    
    const getHighRank = array => {
        let highRank = 7;
        let result = 0;
        
        for(let i = 0; i<dupDelete.length; i++) {
            if(dupDelete[i] === 0) {
                highRank --
            }
        }
        result = highRank - duplicateNumber
        return result > 6 ? result = 6 : result
    }
    
    const rowRank = getRowRank(dupDelete)
    
    const highRank = getHighRank(dupDelete)
    
    return [highRank, rowRank]
}

다른 사람 풀이

일단 rank 배열 선언은 감탄스러웠다. rank배열의 index로 순위를 편하게 뽑을 수 있다.
minCount로 lottos와 win_nums의 중복 개수를 뽑고, zeroCount로 lottos의 0의 개수를 뽑는다.
최고 순위를 뽑을 수 있게 maxCount는 minCount와 zeroCount를 더해준다.
minCount와 maxCount의 값을 rank 배열의 인덱스로 활용하여 순위를 뽑는다.
상수는 rank 배열에만 쓰이게 하고 가독성도 좋은 풀이라고 생각한다.

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]];
}
profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

0개의 댓글