[Lv.1]로또의 최고 순위와 최저 순위

Jihyun-Jeon·2022년 2월 27일
1

문제: https://programmers.co.kr/learn/courses/30/lessons/77484

🔶내가 한 방법

1.최저갯수 : filter를 사용해 lotto배열 중 win배열과 일치하는 요소의 갯수를 구한다.
2.최고갯수 : lotto배열 중 0의 갯수를 구하고, 최저갯수를 더함.
3.등수 출력: rank배열에서 해당 갯수에 상응하는 요소의 인덱스값을 등수로 받음.
(인덱스값이 없어서 -1이 나오면, 6으로 출력하기)

function solution(lotto, win) {
  const minMatched = lotto.filter((el) => win.some((winEl) => winEl === el)).length;
  const maxMatched = lotto.filter((el) => el === 0).length + minMatched;

  const rank = ['', 6, 5, 4, 3, 2];

  return [
    rank.indexOf(maxMatched) === -1 ? 6 : rank.indexOf(maxMatched),
    rank.indexOf(minMatched) === -1 ? 6 : rank.indexOf(minMatched),
  ];
}

console.log(solution([44, 1, 31, 25, 0, 0], [31, 10, 45, 1, 6, 19])); // [3,5]

🔶다른사람 풀이

//방법1 - filter, includes 이용
function solution(lottos, win) {
  let rank = [6,6,5,4,3,2,1];
  
  let min = lottos.filter(el=>win.includes(el)).length; 
  let zero = lottos.filter(el=>!el).length; //[0,0] //2
 
   return [rank[min+zero],rank[min]]; 
}
  
console.log(solution([44, 1, 0, 0, 31, 25],[31, 10, 45, 1, 6, 19])); //[3,5]


//방법2(원초적인 방법) - for of, includes, switch 이용
function solution(lottos, win_nums) {
    let answer = [];
    let max = 0;
    let min = 0;

    for (let lotto of lottos) {
        if (win_nums.includes(lotto)) {
            min++;
        }
        if (lotto === 0) {
            max++;
        }
    }

    switch (min + max) {
        case 6:
            answer.push(1);
            break;
        case 5:
            answer.push(2);
            break;
        case 4:
            answer.push(3);
            break;
        case 3:
            answer.push(4);
            break;
        case 2:
            answer.push(5);
            break;
        default:
            answer.push(6);
            break;
    }

    switch (min) {
        case 6:
            answer.push(1);
            break;
        case 5:
            answer.push(2);
            break;
        case 4:
            answer.push(3);
            break;
        case 3:
            answer.push(4);
            break;
        case 2:
            answer.push(5);
            break;
        default:
            answer.push(6);
            break;
    }

    return answer;
}

console.log(solution([44, 1, 0, 0, 31, 25],[31, 10, 45, 1, 6, 19])); //[3,5]

🔶 피드백

  1. 배열에 해당 요소가 있는지 검증할 때, some이 아닌 includes를 사용하는게 더 좋았음
  2. boolean이용
console.log(!0); // true
console.log(!3); // false

0개의 댓글