Programming

[알고리즘] 로또의 최고 순위와 최저 순위

jay-dev 2023. 6. 26. 19:04

프로그래머스에서 문제 보기

My Solution / Try

function solution(lottos, win_nums) {
    let count = 0
    let zeroCnt = 0
    //당첨 번호 배열 반복문을 돌며 내 번호가 있다면 count++
    //0의 개수만큼 zeroCnt++
    for (let i = 0 ; i < win_nums.length; i++) {
        if (lottos.includes(win_nums[i])) {
            count++
        }
        if (lottos[i] === 0) {
            zeroCnt++            
        }
    }    
  	//객체를 활용해 맞춘 개수를 키로, 순위를 벨류로 지정
    let obj = {
        0 : 6,
        1 : 6,
        2 : 5,
        3 : 4,
        4 : 3,
        5 : 2,
        6 : 1
    }
    let countPlus = (count + zeroCnt);
    let countStr = (count)
    return [obj[countPlus],obj[countStr]];
}

Advanced Solution

  1. 이중 반복문보다 reduce 메서드를 활용하여 코드를 이전보다 간결하게 작성
  2. 객체의 키/밸류 활용보다 배열의 인덱스값 활용하여 가독성을 높임
function solution(lottos = [], win_nums = []) {
  //인덱스 값이 곧 순위
  const rank = [6, 6, 5, 4, 3, 2, 1]
  
  let [max, min] = lottos.reduce(([max, min], cur) => win_nums.includes(cur)? [++max, ++min] : (cur === 0 ? [++max, min] : [max, min]), [0, 0])
  return [rank[max], rank[min]];
};

 

'Programming' 카테고리의 다른 글

[WIL] week1 회고  (0) 2023.06.26
[알고리즘] 프로그래머스 두 개 뽑아서 더하기  (0) 2023.06.26
[TIL] 자료구조 Map, Set  (0) 2023.06.26
[TIL] 숫자야구게임  (0) 2023.06.26
[JS] 호이스팅(Hoisting)  (3) 2023.06.26