본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 31497번 생일 축하합니다~

by 현장 2025. 12. 18.

-Code

import java.util.Scanner;

public class BOJ31497 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        String[] names = new String[n];

        for (int i = 0; i < n; i++) {
            names[i] = sc.next();
        }

        String result = "";
        // 모든 사람 순회하면서 물어보기
        for (int i = 0; i < n; i++) {
            System.out.println("? " + names[i]);
            // 인터렉티브 문제이므로 상대방에게 값을 넘겨줌
            System.out.flush();
            // 생일이 맞는지 상대방이 알려줌
            int answer1 = sc.nextInt();
            if (answer1 == 1) {
                // 1이 나왔으면 진짜인지 확인하기 위해 한 번 더 질문
                System.out.println("? " + names[i]);
                System.out.flush();
                // 생일이 맞는지 다시 물어본 것의 대답
                int answer2 = sc.nextInt();
                if (answer2 == 1) {
                    // 2번 질문이 1이면 생일자
                    result = names[i];
                    break;
                }
            }
        }
        // 만약 위에서 못 찾았다면 다시 확인 (전부 0이 나온 경우)
        for (int i = 0; i < n; i++) {
            System.out.println("? " + names[i]);
            System.out.flush();
            // 다시 질문
            int res = sc.nextInt();
            if (res == 1) {
                result = names[i];
                break;
            }
        }

        System.out.println("! " + result);
        System.out.flush();
    }
}

인터렉티브 문제가 뭔지 몰라서 이상하게 풀다가 찾아서 해결을 했습니다. flush를 통해 상대방에게 값을 넘겨주며 상대가 값을 토대로 다시 넣어서 진행되는 문제였습니다.

'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글

[백준/Java] 2442번 별 찍기 - 5  (0) 2025.12.19
[백준/Java] 6795번 Up and Down  (0) 2025.12.19
[백준/Java] 34917번 M  (0) 2025.12.17
[백준/Java] 10384번 팬그램  (0) 2025.12.16
[백준/Java] 11726번 2×n 타일링  (0) 2025.12.15