[ 백준 ] 10708 크리스마스 파티 [ js ]

Ann·2023년 7월 4일
0

Algorithm

목록 보기
50/53

10708 크리스마스 파티

문제

JOI는 친구 1부터 친구 N까지 총 N 명의 친구와 함께, 크리스마스 파티에 갔습니다. 크리스마스 파티 분위기도 달아오르니, JOI는 친구들과 함께 다음과 같은 게임을 하기로 했습니다.

가장 먼저, JOI는 N명의 친구 중 한 명을 선택합니다. 이제 그 친구를 '타겟'이라고 부릅시다.
JOI는 타겟으로 고른 친구에게, 타겟이 되었다는 것을 몰래 알려줍니다. 타겟이 아닌 친구들은 누가 타겟인지 알 수 없습니다.
타겟이 아닌 친구들은 각자 타겟이 누구일까 생각해서, 그 사람의 이름을 종이에 씁니다. 타겟은 자기자신의 이름을 종이에 씁니다.
모든 사람이 종이에 이름을 썼다면, JOI는 타겟의 이름을 발표합니다.
예상이 맞은 사람은 1점을 얻습니다. 당연히, 타겟은 자신의 이름을 적었으므로, 반드시 1점을 얻습니다. 예상이 빗나간 사람은 점수를 주지 않습니다.
추가로, 예상이 빗나간 사람의 수가 X명일 경우, 타겟은 추가로 X점을 얻습니다.
JOI와 친구들은 이 게임을 M번 했습니다. M번의 게임을 했을 때, 각 친구들의 합계 점수를 구하세요.

입력

입력은 총 3 + M 줄이 주어집니다.

첫 번째 줄에는 친구들의 수 N (3 ≦ N ≦ 100)이 주어집니다.

두 번째 줄에는 JOI와 친구들이 했던 게임의 횟수 M (3 ≦ M ≦ 100)이 주어집니다.

세 번째 줄에는 M개의 정수 A1, A2, ..., AM 이 공백을 사이에 두고 주어집니다. i번째 (1 ≦ i ≦ M) 게임의 타겟이 친구 Ai (1 ≦ Ai ≦ N) 라는 것을 나타냅니다.

이어지는 M개의 줄 중 i(1 ≦ i ≦ M)번째 줄에는, N개의 정수 Bi,1, Bi,2, ..., Bi,N가 공백을 사이에 두고 주어집니다. 이것은 i번째 게임에서 친구 j(1 ≦ j ≦ N)가 친구 Bi,j (1 ≦ Bi,j ≦ N)의 이름을 종이에 썼다는 것을 의미합니다. 타겟은 자신의 이름을 종이에 쓰도록 되어 있으므로, j = Ai 이면, 반드시 Bi,j = j입니다.

출력

M번의 게임에서, 각각의 친구들이 얻은 합계 점수를 출력하세요.

총 N줄의 출력에서, j번째 (1 ≦ j ≦ N) 줄에는 친구 j의 합계 점수를 출력하세요.

풀이

// let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let input = [5,
			 3,
			`3 3 1`,
 			`2 4 3 3 3`,
            `4 3 3 3 1`,
            `1 3 4 1 1`];
            
let [N, M, target, ...arr] = input;
let NN = parseInt(N);
let MM = parseInt(M);
let targetArr = target.split(' ').map(n=>parseInt(n));

let score = [];
for(let i=0; i<NN; i++){
    score.push(0)
};

for(let i=0; i<MM; i++){
    let play = arr[i].split(' ').map(n=>parseInt(n));
    let lose = 0;
    for(let j=0; j<NN; j++){
        if(play[j]===targetArr[i]){
            score[j]++
        }else{
            lose++
        }
    }
    score[targetArr[i]-1] += lose
};
console.log(score.join('\n'))

게임을 총 M번 중 i번째, 친구를 총 N명 중 j번째로 두고 풀이하였다.
먼저 score를 0점으로 설정해두고 각 게임의 라운드마다 점수를 더해주었다.
i번째 게임에서 target을 맞춘 j번째 친구는 1점을 얻고,
맞추지 못한 사람들의 수를 lose에 더하여 게임이 끝날 때 target 친구의 점수에 합쳐주었다.
마지막에 join으로 점수를 출력하여 풀이하였다.

profile
안녕하세요

0개의 댓글