발행일

[99클럽] 99클럽 코테 스터디 9일차 TIL + 해시

[99클럽] 99클럽 코테 스터디 9일차 TIL + 해시

이 글은 네이버 블로그에 2025년 1월 23일에 올렸던 것을 그대로 옮겨온 것입니다.

  • 오늘의 학습 키워드

  • 공부한 내용 본인의 언어로 정리하기

  • 오늘의 회고

  • 어떤 문제가 있었고, 나는 어떤 시도를 했는지

  • 어떻게 해결했는지

  • 무엇을 새롭게 알았는지

  • 내일 학습할 것은 무엇인지

비기너 전주 듣고 노래 맞히기 https://www.acmicpc.net/problem/31562

미들러 이분 그래프 https://www.acmicpc.net/problem/1707

챌린저 비슷한 단어 https://www.acmicpc.net/problem/2179

// 입력 처리 및 구현
const readline = require("readline");

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

let input = [];

rl.on("line", (line) => {
  input.push(line);
}).on("close", () => {
  // 첫 번째 줄에서 N, M 추출
  const [N, M] = input[0].split(" ").map(Number);

  const songs = new Map();

  // N개의 노래 정보 처리
  for (let i = 1; i <= N; i++) {
    const [T, title, ...notes] = input[i].split(" ");
    const firstThreeNotes = notes.slice(0, 3).join("");
    
    if (!songs.has(firstThreeNotes)) {
      songs.set(firstThreeNotes, []);
    }
    songs.get(firstThreeNotes).push(title);
  }

  const results = [];

  // M개의 시도 처리
  for (let i = N + 1; i < N + 1 + M; i++) {
    const attempt = input[i].split(" ").join("");

    if (songs.has(attempt)) {
      const matchedTitles = songs.get(attempt);

      if (matchedTitles.length === 1) {
        results.push(matchedTitles[0]);
      } else {
        results.push("?");
      }
    } else {
      results.push("!");
    }
  }

  // 결과 출력
  console.log(results.join("\n"));
});

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

필수 해시태그: #99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL