반응형
문제
https://www.acmicpc.net/problem/26043
JAVA코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private final static String NONE = "None";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
/**
* 본인이 좋아하는 메뉴를 먹은 학생 목록 A
* 본인이 좋아하지 않는 메뉴를 먹은 학생 목록 B
* 학교 식당에 도착하였으나 식사를 하지 못한 학생 목록 C
*/
List<Integer> listA = new ArrayList<>();
List<Integer> listB = new ArrayList<>();
List<Integer> listC = new ArrayList<>();
/*
* 1 a b: 학생 번호가 양의 정수 a이고 좋아하는 메뉴 번호가 양의 정수 b인 학생 1명이 학교 식당에 도착하여 식당 입구의 맨 뒤에 줄을 서기 시작한다.
* 2 b: 메뉴 번호가 양의 정수 b인 식사 1인분이 준비되어 식당 입구의 맨 앞에서 대기 중인 학생 1명이 식사를 시작한다.
*/
int n = Integer.parseInt(br.readLine());
Queue<Student> waiting = new LinkedList<>();
for (int idx = 0; idx < n; idx++) {
st = new StringTokenizer(br.readLine());
int category = Integer.parseInt(st.nextToken());
// 학생인 경우
if (category == 1) {
waiting.add(new Student(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
} else {
// 메뉴인 경우
Student student = waiting.poll();
int menu = Integer.parseInt(st.nextToken());
if (student.getFavoriteMenu() == menu) {
// 본인이 좋아하는 메뉴를 먹은 학생 목록 A
listA.add(student.getId());
} else {
// 본인이 좋아하지 않는 메뉴를 먹은 학생 목록 B
listB.add(student.getId());
}
}
}
// 식사를 하지 못한 학생 목록
while(!waiting.isEmpty()) {
Student student = waiting.poll();
listC.add(student.getId());
}
bw.write(listA.isEmpty() ? NONE : printList(listA));
bw.newLine();
bw.write(listB.isEmpty() ? NONE : printList(listB));
bw.newLine();
bw.write(listC.isEmpty() ? NONE : printList(listC));
br.close();
bw.flush();
bw.close();
}
private static String printList(List<Integer> list) {
StringBuilder sb = new StringBuilder();
Collections.sort(list);
list.forEach(id -> {
sb.append(id);
sb.append(" ");
});
return sb.toString().trim();
}
public static class Student{
int id;
int favoriteMenu;
public Student(int id, int favoriteMenu) {
this.id = id;
this.favoriteMenu = favoriteMenu;
}
public int getId() {
return id;
}
public int getFavoriteMenu() {
return favoriteMenu;
}
}
}
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
[BAEKJOON_26042 - JAVA] 식당 입구 대기 줄 (0) | 2022.11.24 |
---|---|
[BAEKJOON_26005 - JAVA] 나뭇잎 학회 (0) | 2022.11.23 |
[BAEKJOON_3055 - JAVA] 탈출 (0) | 2021.01.01 |
[BAEKJOON_1759 - JAVA] 암호 만들기 (0) | 2020.12.31 |
[KAKAO_BLIND_RECRUITMENT_2020] 괄호 변환 (0) | 2020.12.30 |