728x90
반응형
2024.07.18기준 - 실버4
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 큐를 이용해 들어온 수를 이용해 출력해주는 문제입니다.
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
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 31844번 창고지기 (0) | 2024.07.20 |
---|---|
BAEKJOON / 백준 - JAVA 31867번 홀짝홀짝 (0) | 2024.07.19 |
BAEKJOON / 백준 - JAVA 31066번 비 오는 날 (0) | 2024.07.17 |
BEAKJOON / 백준 - JAVA 30502번 미역은 식물 아닌데요 (0) | 2024.07.17 |
BEAKJOON / 백준 - JAVA 1991번 트리 순회 (2) | 2024.07.16 |