프로그래머스 | filter 사용하기

chaen·2024년 3월 2일
post-thumbnail

📌 문제

다섯 명의 축구 선수가 한 번 골을 넣을 때마다 150만원을 받을 수 있는 대회에 참가하였습니다. 골을 세 번 넣은 1명의 선수만이 우승하였고, 한 골도 넣지 못한 선수는 없습니다.
참가자 5명의 이름을 player 배열에, 한 번 골을 넣은 선수들의 이름을 one, 두 번 넣은 선수들을 two 배열에 담아 주어줍니다.
상금의 총 수여금액와 우승자의 이름을 출력하세요.

입출력 예

playeronetwoanswer
"a, b, c, d, e""a, c""b, d""e"

✨ 해결 방법

one 배열에도, two 배열에도 포함되지 않은 요소를 추출하고, 1번 넣은 사람들의 상금은 150 * 1 * 1번 넣은 사람의 수 * 1, 2번 넣은 사람의 상금은 150 * 2 * 2번 넣은 사람의 수, 마지막 세 번 넣은 사람이 1명이므로 150 * 3 * 1하여 총 금액을 구합니다.

우선 승자의 경우, filterincludes를 통해 구합니다. a.includes(element)를 사용하면 a 배열에 element가 있다면 true, 없다면 false를 반환하고, filtertrue인 요소들만 선택하여 반환하게 됩니다.

150 * 1 * 1번 넣은 사람의 수 * 1 + 150 * 2 * 2번 넣은 사람의 수 + 150 * 3 * 1 는 150으로 묶을 수 있으므로 150 * ( 1번 넣은 사람의 수 + 2 * 2번 넣은 사람의 수 + 3 ) 과 같습니다.

n 번 넣은 사람의 수 = n 배열의 길이와 같으므로 아래와 같이 작성할 수 있습니다.

💻 solution

function solution(player, one, two) {
    let winner = player.filter(e => !one.includes(e) && !two.includes(e));
    let reward = 150*(1*one.length + 2*two.length + 3);
    
    return String(`${reward}만원(${winner})`)
}

0개의 댓글