백준 31562 java

magicdrill·2024년 10월 2일
0

백준 문제풀이

목록 보기
453/655

백준 31562 java

이렇게 덩치가 커질 문제가 아닌거 같은데 아직 java 자료구조를 잘 사용하지 못하겠다.

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Vector;

public class bj31562 {

    static Scanner scanner = new Scanner(System.in);
    static Map<String, Vector<Character>> music;
    static Vector<Vector<Character>> question;

    public static void main(String[] args) {
        inputData();
        findAnswer();
    }

    public static void inputData()
    {
        music = new HashMap<>();
        question = new Vector<>();
        int length, N, M, i;
        String title;
        String syllable;

        N = scanner.nextInt();
        M = scanner.nextInt();
        scanner.nextLine();  // 개행 처리

        //음악 정보 입력
        for(i = 0; i < N; i++)
        {
            Vector<Character> temp = new Vector<>();

            length = scanner.nextInt();
            title = scanner.next();
            syllable = scanner.nextLine().trim();  // 음절 입력 (공백 제거)

            String[] parts = syllable.split(" ");
            for (String part : parts) {
                temp.add(part.charAt(0));
            }
            music.put(title, temp);
        }

        //질문정보 입력
        for(i = 0; i < M; i++)
        {
            Vector<Character> temp = new Vector<>();

            syllable = scanner.nextLine().trim();  // 음절 입력 (공백 제거)
            String[] parts = syllable.split(" ");
            for (String part : parts) {
                temp.add(part.charAt(0));
            }
            question.add(temp);
        }
    }

    public static void findAnswer()
    {
        int i, j;
        int count;
        char a, b, c;
        char A, B, C;
        String answer = "";

        for(i = 0; i < question.size(); i++)
        {
            count = 0;
            a = question.get(i).get(0);
            b = question.get(i).get(1);
            c = question.get(i).get(2);

            // Map에서 title(키)와 그에 대응하는 Vector<Character> 순회
            for (Map.Entry<String, Vector<Character>> entry : music.entrySet()) {
                Vector<Character> syllable = entry.getValue();  // 해당 음악의 음절 벡터 가져오기
                A = syllable.get(0);  // 첫 번째 음절
                B = syllable.get(1);  // 두 번째 음절
                C = syllable.get(2);  // 세 번째 음절

                // 첫 3개의 문자가 질문의 a, b, c와 일치하는지 확인
                if (a == A && b == B && c == C) {
                    count++;
                    if (count == 1) {
                        answer = entry.getKey();  // 첫 번째 일치하는 제목 저장
                    } else {
                        answer = "?";  // 두 번째 이상 일치하면 "?" 반환
                        break;
                    }
                }
            }
            if (count == 0) {
                answer = "!";
            }

            System.out.println(answer);
        }
    }
}

0개의 댓글