반응형
문제링크
https://www.acmicpc.net/problem/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("!");
}
});
반응형
'개발' 카테고리의 다른 글
[99클럽] 알고리즘 TIL: 백준 10828번 스택 - JavaScript (1) | 2025.02.03 |
---|---|
[99클럽] 알고리즘 TIL: 백준 32953번 회상 - JavaScript (0) | 2025.01.24 |
[HTTP 완벽 가이드] 16장 국제화 16.1~16.3 (1) | 2025.01.22 |
[HTTP 완벽 가이드] 15장 엔터티와 인코딩 15.4~15.10 (0) | 2025.01.22 |
[99클럽] 알고리즘 TIL: 백준 27160번 할리갈리 - JavaScript (0) | 2025.01.21 |