본문 바로가기
개발

[99클럽] 알고리즘 TIL: 백준 31562번 전주 듣고 노래 맞히기 - JavaScript

by soyooooon 2025. 1. 24.
반응형

문제링크

https://www.acmicpc.net/problem/31562

백준 31562번 문제

풀이방법

  • 첫번째 라인부터 N라인까지 순회하며 song과 notes 배열을 만든다
  • notes 배열에서 앞 3자리만 slice로 꺼내 하나의 문자열로 join 하여 'firstNotes'에 할당한다.
  • firstNotes를 key로 잡고, 만약 for 루프를 돌며 이미 value가 존재하는 경우는 중복으로 판단하여 문제에 제시된 조건에 따라 "?"를 value로 대체하고 value가 없는 경우에는 song을 value로 추가한다.
  • N+1 라인부터 N+M 라인까지는 문제들이 나열되어 있다.
  • 문제 라인을 하나의 문자열로 변환하여 firstNotes에 할당한다.
  • noteMapping에 firstNotes와 일치하는 key가 있다면 value를 그대로 출력하고, 만약 없다면 해당되는 곡이 없다는 의미이기 때문에 "!"를 출력한다.
const readline = require("readline");

const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});

const input = [];

rl.on("line", (line) => {
	input.push(line);
});

rl.on("close", () => {
	const [N, M] = input[0].split(" ").map(Number);
	const noteMapping = new Map();

	for (let i = 1; i <= N; i++) {
		const [_, song, ...notes] = input[i].split(" ");

		const firstNotes = notes.slice(0, 3).join("");
		const hasNote = noteMapping.get(firstNotes);
		noteMapping.set(firstNotes, hasNote ? "?" : song);
	}

	for (let i = N + 1; i <= N + M; i++) {
		const firstNotes = input[i].split(" ").join("");
		const result = noteMapping.get(firstNotes);

		if (result) console.log(result);
		else console.log("!");
	}
});
반응형