Study/코딩스터디_TIL
[java] 큐 활용 문제풀이 백준 26043번 식당메뉴
아이바
2025. 2. 6. 22:25
큐를 이용해 들어온 수를 이용해 출력해주는 문제입니다.
1. switch를 이용해 유형에 따라 처리해 주었습니다.
1-1. 1유형이 들어온다면 학생의 번호와 원하는 메뉴를 배열로 만들어 큐에 저장했습니다.
1-2. 2유형이 들어온다면 큐에서 poll()을 이용해 원하는 메뉴를 먹었다면 A에 못 먹었다면 B에 저장을 해주엇습니다.
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
type = Integer.parseInt(st.nextToken()); // 유형
switch (type) {
case 1:
a = Integer.parseInt(st.nextToken()); // 학생의 번호
b = Integer.parseInt(st.nextToken()); // 좋아하는 메뉴
member = new int[2];
member[0] = a;
member[1] = b;
list.add(member);
break;
case 2:
b = Integer.parseInt(st.nextToken()); // 준비된 메뉴 번호
member = list.poll();
if (member[1] == b) { // 원하는 메뉴를 먹었을 때
A.add(member[0]);
} else { // 원하지 않은 메뉴를 먹었을 때
B.add(member[0]);
}
break;
}
}
2. 저장된 A, B 리스트를 통해 저장이 된 학생이 있다면 정렬을 한 후 출력을 해주었습니다.
if (A.size() == 0) { // 원하는 메뉴를 먹은 학생이 없다면
sb.append("None");
} else {
Collections.sort(A);
for (int nn : A) {
sb.append(nn).append(" ");
}
}
sb.append("\n");
if (B.size() == 0) { // 원하지 않은 메뉴를 먹은 학생이 없다면
sb.append("None");
} else {
Collections.sort(B);
for (int nn : B) {
sb.append(nn).append(" ");
}
}
3. 큐에 아직 남아있는 학생이 있다면 C에 저장한 후 정렬 후 출력을 해 주었습니다.
if (list.size() == 0) { // 못 먹은 학생이 없다면
sb.append("None");
} else {
List<Integer> C = new LinkedList<>(); // 못 먹은 학생
while (!list.isEmpty()) {
C.add(list.poll()[0]);
}
Collections.sort(C);
for (int nn : C) {
sb.append(nn).append(" ");
}
}
코드
package Main;
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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine()); // 정보의 개수
List<Integer> A = new LinkedList<>(); // 원하는걸 먹은 학생
List<Integer> B = new LinkedList<>(); // 원하지 않는걸 먹은 학생
Queue<int[]> list = new LinkedList<>(); // 식당 줄
int[] member;
int type, a, b;
StringTokenizer st;
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
type = Integer.parseInt(st.nextToken()); // 유형
switch (type) {
case 1:
a = Integer.parseInt(st.nextToken()); // 학생의 번호
b = Integer.parseInt(st.nextToken()); // 좋아하는 메뉴
member = new int[2];
member[0] = a;
member[1] = b;
list.add(member);
break;
case 2:
b = Integer.parseInt(st.nextToken()); // 준비된 메뉴 번호
member = list.poll();
if (member[1] == b) { // 원하는 메뉴를 먹었을 때
A.add(member[0]);
} else { // 원하지 않은 메뉴를 먹었을 때
B.add(member[0]);
}
break;
}
}
if (A.size() == 0) { // 원하는 메뉴를 먹은 학생이 없다면
sb.append("None");
} else {
Collections.sort(A);
for (int nn : A) {
sb.append(nn).append(" ");
}
}
sb.append("\n");
if (B.size() == 0) { // 원하지 않은 메뉴를 먹은 학생이 없다면
sb.append("None");
} else {
Collections.sort(B);
for (int nn : B) {
sb.append(nn).append(" ");
}
}
sb.append("\n");
if (list.size() == 0) { // 못 먹은 학생이 없다면
sb.append("None");
} else {
List<Integer> C = new LinkedList<>(); // 못 먹은 학생
while (!list.isEmpty()) {
C.add(list.poll()[0]);
}
Collections.sort(C);
for (int nn : C) {
sb.append(nn).append(" ");
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90