오늘의 학습 키워드
https://www.acmicpc.net/problem/26042
- 완주하지 못
공부한 내용 본인의 언어로 정리하기
문자답안
package backjoon.silver.lv5;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class B26042 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Queue<Integer> queue = new LinkedList<>();
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
String[] inputs = br.readLine().split(" ");
if (Integer.parseInt(inputs[0]) == 1) {
int value = Integer.parseInt(inputs[1]);
queue.add(value);
// 큐의 크기 업데이트 시 최대 크기와 최소 값 관리
if(queue.size() > max) {
max = queue.size();
min = value; // 새로운 최대 크기 도달 시 최소 값 초기화
} else if(queue.size() == max) {
min = Math.min(min, value); // 최대 크기와 동일한 경우 최소 값 업데이트
}
} else {
queue.poll();
}
}
System.out.println(max + " " + min);
}
}
문제 분석
- 입력 형식
- 첫 번째 줄에는 명령어의 개수 n이 주어진다.
- 다음 줄부터는 n개의 명령어가 주어진다. 각 명령어는 두 가지 유형 중 하나이다.
- 1 a: 큐에 정수 a를 추가한다.
- 2: 큐에서 가장 앞에 있는 정수를 제거한다.
- 출력 요구사항
- 최대 큐의 크기와, 그 크기일 때의 최소 값을 출력
- 문제 해결의 핵심
- 큐의 크기가 변경될 때마다 최대 크기를 추적하고, 해당 크기에서의 최소 값을 유지해야 한다.
- 단, 같은 큐의 크기가 반복된다면 그중에서 최솟값을 구해야 한다.
해결 방법
- 큐 사용: 명령어를 처리하기 위해 Queue를 사용하여 큐 연산을 수행한다.
- 최대 크기 및 최소 값 추적:
- 큐의 크기가 증가할 때마다 현재 크기를 max와 비교하여 갱신한다.
- max 값이 경신될 때마다 min 값도 경신한다.
- 큐의 크기가 기존의 최대 크기와 동일한 경우, 해당 큐에 추가되는 값과 기존의 min 값을 비교하여 더 작은 값을 min으로 설정한다.
// 큐의 크기 업데이트 시 최대 크기와 최소 값 관리
if(queue.size() > max) {
max = queue.size();
min = value; // 새로운 최대 크기 도달 시 최소 값 초기화
} else if(queue.size() == max) {
min = Math.min(min, value); // 최대 크기와 동일한 경우 최소 값 업데이트
}
오늘의 회고
정리를 잘하자.
- 완주하지