728x90
❓ 식당 메뉴
🏷️ 관련 주제 : 정렬
큐

💦 나의 시도
큐(Queue)를 이용한 풀이
학교 식당에 도착한 학생은 식당 입구에 줄을 서서 대기한다.
학교 식당에 먼저 도착한 학생이 나중에 도착한 학생보다 식당 입구의 앞쪽에서 대기한다.
👉 FIFO 원칙을 따르므로 큐(Queue) 선택
- 입력값에 따른 코드 실행
- 입력되는 값이 유형 1인 경우,
- int[]
student
: 길이 2인 학생 정보를 담을 배열student[0]
: 학생 번호student[1]
: 좋아하는 메뉴
- Queue<int[]>
waiting
에student
추가
- int[]
- 입력되는 값이 유형 2인 경우,
- int
prepared
: 준비된 메뉴 - 큐
waiting
에서 원소를 하나 꺼내(student
) 조건문 실행- 준비된 메뉴(
prepared
)와 학생이 좋아하는 메뉴(student[1]
)이 일치하면 ArrayListA
에 학생 번호(student[0]
) 추가 - 그렇지 않으면 ArrayList
B
에 학생 번호(student[0]
) 추가
- 준비된 메뉴(
- int
- 입력되는 값이 유형 1인 경우,
모든 입력을 받은 후,
큐 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