코드 설명
1) 주요 변수와 클래스 선언:
import java.io.*;
import java.util.*;
public class BOJ24511 {
static Deque<Integer> qs;
static int n, m;
qs
: 프로그램의 핵심 데이터 구조인Deque
를 저장하는 변수다.n
: 초기 데이터의 개수를 저장하는 변수다.m
: 추가 작업에 사용할 데이터 개수를 저장하는 변수다.
2) 메인 로직 구현:
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine()); // 초기 데이터 개수 입력
String[] typeInput = br.readLine().split(" "); // 데이터 유형 입력
String[] initInput = br.readLine().split(" "); // 초기 데이터 값 입력
qs = new ArrayDeque<>(); // Deque 초기화
BufferedReader
를 사용하여 입력을 읽는다.typeInput
과initInput
배열을 통해 입력 데이터를 분류하고 저장한다.
3) 초기 데이터 필터링 및 Deque 초기화:
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(initInput[i]);
if (typeInput[i].equals("0")) { // 조건에 맞는 데이터만 추가
qs.addLast(num);
}
}
typeInput
값이 "0"인 경우에만 데이터를 Deque에 추가한다.
4) 추가 입력 처리 및 결과 출력:
m = Integer.parseInt(br.readLine()); // 추가 작업 개수 입력
String[] input = br.readLine().split(" ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m; i++) {
int p = Integer.parseInt(input[i]);
qs.addFirst(p); // 새로운 데이터를 앞쪽에 삽입
sb.append(qs.pollLast()).append(" "); // 뒤쪽에서 데이터를 제거하고 결과에 추가
}
System.out.println(sb);
}
Deque
의 앞쪽에 데이터를 추가(addFirst
)하고, 뒤쪽 데이터를 제거(pollLast
)하여 결과를 생성한다.StringBuilder
를 사용해 결과 문자열을 효율적으로 생성한다.
결과
소감
처음엔 큐와 스택을 함께 썼는데 결과는 잘 나오지만 시간 초과가 났다. 뭐가 문제인지 생각해보다가 테스트 파라미터가 10000, 100000,... 이런 식으로 들어간다면 1초 이내에 처리하기엔 무리가 있었다. 따라서 해결을 위해 지금과 같은 풀이를 하였다. 문제를 더 단순하게 볼 필요가 있음을 체감했다.
728x90
반응형
'기록 > 코테' 카테고리의 다른 글
[11054] 가장 긴 바이토닉 수열 (0) | 2025.01.24 |
---|---|
[2346] 풍선 터트리기 (1) | 2025.01.21 |