
-Code
import java.io.*;
import java.util.*;
public class BOJ10280 {
static class Pizza {
String name;
int cal;
public Pizza(String name, int cal) {
this.name = name;
this.cal = cal;
}
public boolean equalPizza(Pizza pizza) {
if (pizza == null) return false;
return cal == pizza.cal && name.equals(pizza.name);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int pizzaCnt = Integer.parseInt(st.nextToken());
int wantIdx = Integer.parseInt(st.nextToken()) - 1;
// 정렬되어 있으므로 바로 받고 내가 원하는 피자 저장
Deque<Pizza> pizzaDeq = new ArrayDeque<>();
Pizza wantPizza = null;
for (int i = 0; i < pizzaCnt; i++) {
st = new StringTokenizer(br.readLine());
int cal = Integer.parseInt(st.nextToken());
String name = st.nextToken();
Pizza nowPizza = new Pizza(name, cal);
if (wantIdx == i) {
wantPizza = nowPizza;
}
pizzaDeq.addLast(nowPizza);
}
// 번갈아 가면서 계산
int curSize = pizzaCnt;
for (int i = 0; i < pizzaCnt - 1; i++) {
// 0이면 엘리스, 1이면 밥, 2이면 나
int turn = i % 3;
if (turn == 0) {
// 엘리스의 턴
// 큰 칼로리 피자 제거
pizzaDeq.pollLast();
} else if (turn == 1) {
// 밥의 턴
// 작은 칼로리 피자를 앞에서 제거하면 내가 원하는 피자 위치가 변동됨
wantIdx--;
pizzaDeq.pollFirst();
} else {
// 나의 턴
// 왼쪽과 오른쪽의 남은 피자의 양에 따라 많은쪽을 제거
int left = wantIdx;
int right = curSize - wantIdx - 1;
if (left >= right) {
// 다음이 엘리스 이므로 같은 경우도 밥에서 제거
wantIdx--;
pizzaDeq.pollFirst();
} else {
pizzaDeq.pollLast();
}
}
// 제거하기 때문에 총 피자 갯수 변동
curSize--;
}
// 결과 출력
System.out.println(pizzaDeq.pollLast().equalPizza(wantPizza) ? "YES" : "NO");
}
}
뭔가 정렬이 되어있고 앞과 뒤에서 제거하기 때문에 Deque를 사용했고 나의 경우 변동된 idx와 크기를 기준으로 해서 빼면 되겠다해서 구현했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 6971번 Nasty Numbers (0) | 2026.03.15 |
|---|---|
| [프로그래머스/Java] 크레인 인형뽑기 게임 (0) | 2026.03.15 |
| [프로그래머스/Java] 성격 유형 검사하기 (0) | 2026.03.13 |
| [백준/Java] 1283번 단축키 지정 (0) | 2026.03.13 |
| [백준/Java] 27951번 옷걸이 (0) | 2026.03.13 |