넘어졌으면 일어서서 다시 걷자 🐈My GitHub🐈

기록/코테

[24511] queuestack

YongE 2025. 1. 22. 20:58

코드 설명


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를 사용하여 입력을 읽는다.
  • typeInputinitInput 배열을 통해 입력 데이터를 분류하고 저장한다.

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