본문 바로가기
Language/Java

[백준 | Java] 26043번 식당 메뉴

by ㅇ달빛천사ㅇ 2025. 2. 7.
728x90
26043번 / 식당 메뉴

식당 메뉴

🏷️ 관련 주제 : 정렬



💦 나의 시도

큐(Queue)를 이용한 풀이

학교 식당에 도착한 학생은 식당 입구에 줄을 서서 대기한다.
학교 식당에 먼저 도착한 학생이 나중에 도착한 학생보다 식당 입구의 앞쪽에서 대기한다.
👉 FIFO 원칙을 따르므로 큐(Queue) 선택

  • 입력값에 따른 코드 실행
    • 입력되는 값이 유형 1인 경우,
      • int[] student : 길이 2인 학생 정보를 담을 배열
        • student[0] : 학생 번호
        • student[1] : 좋아하는 메뉴
      • Queue<int[]> waitingstudent 추가
    • 입력되는 값이 유형 2인 경우,
      • int prepared : 준비된 메뉴
      • waiting에서 원소를 하나 꺼내(student) 조건문 실행
        • 준비된 메뉴(prepared)와 학생이 좋아하는 메뉴(student[1])이 일치하면 ArrayList A에 학생 번호(student[0]) 추가
        • 그렇지 않으면 ArrayList B에 학생 번호(student[0]) 추가

모든 입력을 받은 후,
waiting에 남아있는 학생이 존재하면 원소를 하나씩 꺼내 ArrayList C에 학생 번호 추가

ArrayList A, B, C 오름차순 정렬
BufferedWriter를 이용하여 A ~ C까지 출력값 쓰기
ArrayList가 비어있으면, "None" 쓰기
원소가 존재하면, 원소를 공백 한 칸으로 구분하여 쓰기

마지막으로 BufferedWriter를 Close()하며 출력



📑제출 기록 및 오답 원인


💯 해결 방법

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Queue<int[]> waiting = new LinkedList<>();
        ArrayList<Integer> A = new ArrayList<>();
        ArrayList<Integer> B = new ArrayList<>();
        ArrayList<Integer> C = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int type = Integer.parseInt(st.nextToken());

            if (type == 1) {
                int num = Integer.parseInt(st.nextToken());
                int favorite = Integer.parseInt(st.nextToken());
                int[] student = {num, favorite};
                waiting.add(student);
            } else {
                int prepared = Integer.parseInt(st.nextToken());
                int[] student = waiting.poll();

                if (student[1] == prepared) {
                    A.add(student[0]);
                } else {
                    B.add(student[0]);
                }
            }
        }

        while (!waiting.isEmpty()) {
            C.add(waiting.poll()[0]);
        }

        A.sort(Comparator.naturalOrder());
        B.sort(Comparator.naturalOrder());
        C.sort(Comparator.naturalOrder());

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        if (A.isEmpty()) {
            bw.write("None");
        } else {
            for (int a : A) {
                bw.write(a + " ");
            }
        }
        bw.newLine();

        if (B.isEmpty()) {
            bw.write("None");
        } else {
            for (int b : B) {
                bw.write(b + " ");
            }
        }
        bw.newLine();

        if (C.isEmpty()) {
            bw.write("None");
        } else {
            for (int c : C) {
                bw.write(c + " ");
            }
        }
        bw.close();
    }
}
728x90