728x90
❓ 전주 듣고 노래 맞히기
🏷️ 관련 주제 : 브루트포스 알고리즘 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