본문 바로가기
Language/Java

[백준 | Java] 31562번 전주 듣고 노래 맞히기

by ㅇ달빛천사ㅇ 2025. 1. 24.
728x90
31562번 / 전주 듣고 노래 맞히기

전주 듣고 노래 맞히기

🏷️ 관련 주제 : 브루트포스 알고리즘 Map 문자열



💦 나의 시도

Try01. 브루트포스 알고리즘과 Map을 이용한 풀이

  • Map에 정환이 아는 노래 저장하기
    • 키 : 악보의 첫 세 음
    • 값 : 결과값으로 출력할 값
    • Map에 해당 음의 키가 존재하면 값으로 "?"를 저장
    • Map에 해당 음의 키가 존재하지 않으면 값으로 노래 제목을 저장
  • 입력받은 M개의 노래에 대하여, 해당 음이 Map의 키로 존재하면 해당 키의 값을 출력
  • 존재하지 않으면 "!"를 출력

💥 컴파일 에러

설을 맞아 부모님댁에 고속버스 타고 내려가면서 휴대폰으로 작성한 코드를 제출하였더니 오타로 컴파일 에러 발생
수정하여 재제출

❌ 틀렸습니다.

정환이 알고있는 노래의 첫 세 음을 저장할 때, sb.append(st.nextToken() + " ");을 반복문을 통해서 저장하였는데
맨 뒤에 필요없는 공백이 추가되어 그런 것 같아서 코드 수정

StringBuffer sb = new StringBuffer();
sb.append(st.nextToken() + " ");
sb.append(st.nextToken() + " ");
sb.append(st.nextToken());

❌ 틀렸습니다.

맞히기를 시도할 노래에 대해 결과값을 출력할 때,
BufferedWriter의 br.write();를 사용하였는데
생각해보니 줄바꿈을 하지 않고 출력이 된 것 같아서
br.write();를 할 때마다 뒤에 br.newLine();을 추가

 

맞았습니다!!

  • 메모리 : 15556 KB
  • 시간 : 144 ms
  • 코드 길이 : 1439 B


📑제출 기록 및 오답 원인


휴대폰으로 컴파일러를 통해 코드를 실행하지 못하는 환경에서 코드를 작성하여
마치 칠판에 코드를 작성하는 시험을 보는 듯한 기분이었다.
성공적으로 문제를 해결하여 기분이 좋았다.
버스 타고 내려오는 동안 휴대폰으로 한 문제를 또 풀다니!
추억이 될 것 같다.


💯 해결 방법

import java.io.*;
import java.util.*;

class Main {
    public static void main (String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        Map<String, String> songs = new HashMap<>();

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            st.nextToken();
            String title = st.nextToken();
            StringBuffer sb = new StringBuffer();
            sb.append(st.nextToken() + " ");
            sb.append(st.nextToken() + " ");
            sb.append(st.nextToken());

            String notes = sb.toString();
            if(songs.containsKey(notes)) {
                songs.put(notes, "?");
                continue;
            }
            songs.put(notes, title);
        }

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for (int j = 0; j < M; j++) {
            String quiz = br.readLine();

            if (!songs.containsKey(quiz)) {
                bw.write("!");
                bw.newLine();
                continue;
            }
            bw.write(songs.get(quiz));
            bw.newLine();
        }

        bw.close();
    }
}
728x90


Top