본문 바로가기
Study or Lecture/항해 99클럽 코딩테스트 스터디

항해 99클럽 코딩테스트 스터디 7일차 TIL (비기너)

by yoondoo 2024. 11. 3.
728x90

 

<오늘의 학습 키워드>

 

- HashMap

<오늘의 문제>

제목 : 백준 / 브론즈1 / 31562번 전주 듣고 노래 맞히기

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

<풀이>

정답은 더보기

더보기
더보기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {

    private static Map<String, String> map = new HashMap<>();

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] str = br.readLine().split(" ");
        int N = Integer.parseInt(str[0]);
        int M = Integer.parseInt(str[1]);

        for (int i = 0; i < N; i++) {
            String[] songData = br.readLine().split(" ");
            map.put(songData[1], songData[2]+" "+songData[3]+" "+songData[4]);  // ( "TwinkleStar", "C C G" )
        }


        for (int i = 0; i < M; i++) {
            int cnt = 0;
            String name = "";
            String sound = br.readLine();
            for (String s : map.values()) {
                if (s.equals(sound)) {
                    name = getSongName(sound);
                    ++cnt;
                }
            }
            if (cnt == 0) {
                System.out.println("!");
            } else if (cnt >= 2) {
                System.out.println("?");
            } else {
                System.out.println(name);
            }
        }

    }

    public static String getSongName(String sound) {
        for (String title : map.keySet()) {
            String titleSound = map.get(title);
            if (titleSound.equals(sound)) {
                return title;
            }
        }

        return "";
    }
}

- HashMap을 이용했다.

- 노래 제목과 음 중에서 앞의 3개만 저장, ( "노래 제목", "E D E" )

- 찾을 음을 map의 values로 일치여부를 비교하면서 cnt 증가

- cnt 증가에 따라 결과 출력

 

<결론, 주의할점>

- ? 의 조건이 cnt == 2 가 아니라 cnt > 2 인것

- 처음에 map의 key를 음으로 저장했는데 그렇게 하면 문제가 되는게 map에 put할 때 음이 겹치면 마지막 하나만 저장된다.

반응형

댓글