[구름 goorm] 딱지놀이 - JavaScript
문제 출처
문제 핵심
- 두 딱지의 별의 개수가 다르다면, 별이 많은 쪽의 딱지가 이긴다.
- 별의 개수가 같고 동그라미의 개수가 다르다면, 동그라미가 많은 쪽의 딱지가 이긴다.
- 별과 동그라미의 개수가 같고 네모의 개수가 다르다면, 네모가 많은 쪽의 딱지가 이긴다.
- 별, 동그라미, 네모의 개수가 모두 같고 세모의 개수가 다르다면, 세모가 많은 쪽의 딱지가 이긴다.
- 별, 동그라미, 네모, 세모의 개수가 모두 같다면, 무승부이다.
- 별: 4, 동그라미: 3, 네모: 2, 세모: 1
제한 조건
- 첫째 줄에 딱지놀이의 총 라운드 수 N이 주어진다.
- 그 다음 2N개의 줄에는 각 라운드에서 주어지는 딱지의 정보가 주어진다.
- 두 줄로 첫 번째 줄은 어린이 A, 두 번째 줄은 어린이 B의 딱지 상태가 주어진다.
- 딱지 상태의 첫 번째 값은 a라고 하면, a딱지의 그림의 개수를 의미하고 뒤따라 나오는 a개의 정수는 그림의 종류를 의미한다.
예시
입력
5
1 4
4 3 3 2 1
5 2 4 3 2 1
4 4 3 3 1
4 3 2 1 1
4 2 3 2 1
4 4 3 2 1
3 4 3 2
5 4 4 2 3 1
5 4 2 4 1 3
출력
A
B
B
A
D
풀이
const readline = require("readline");
(async () => {
let rl = readline.createInterface({ input: process.stdin });
const input = [];
for await (const line of rl) {
input.push(line);
}
const N = Number(input[0]);
// i는 N만큼 반복하고, j는 1부터 2씩 증가한다.
for (let i = 1, j = 1; i <= N; i++, j += 2) {
// A와 B의 딱지 상태를 구한다.
// slice() 메서드를 통해 첫 번째 값인 딱지의 개수를 제외한 나머지를 구한다.
const A = input[j].split(" ").slice(1).map(Number);
const B = input[j + 1].split(" ").slice(1).map(Number);
// 무승부 판별을 위해 flag를 true로 초기화한다.
let flag = true;
// 4부터 1까지 (별, 동그라미, 네모, 세모) 반복하며
// filter() 메소드를 사용해 각 모양의 개수를 구한다.
for (let k = 4; k >= 1; k--) {
const aNum = A.filter((n) => n === k).length;
const bNum = B.filter((n) => n === k).length;
// A와 B의 각 모양의 개수를 비교한다.
if (aNum !== bNum) {
// A가 더 많다면 "A"를 출력하고, B가 더 많다면 "B"를 출력한다.
console.log(aNum > bNum ? "A" : "B");
// flag를 false로 바꾼다.
flag = false;
break;
}
}
// flag가 true라면 무승부이므로 "D"를 출력한다.
if (flag) console.log("D");
}
// 문제의 오류로 마지막에 공백이 포함된다.
console.log("");
process.exit();
})();
정리
구름에 다양한 문제들이 있어서 재밌게 풀고 있습니다. 문제를 풀고 풀이를 정리해서 올려두겠습니다!
피드백은 언제나 환영입니다. 😊
사용한 메서드
split() 메서드 - MDN
slice() 메서드 - MDN
map() 메서드 - MDN
filter() 메서드 - MDN