본문 바로가기

Java/백준

[JAVA] 백준 24511 queuestack

24511번: queuestack (acmicpc.net)

 

24511번: queuestack

첫째 줄에 queuestack을 구성하는 자료구조의 개수 $N$이 주어진다. ($1 \leq N \leq 100\,000$) 둘째 줄에 길이 $N$의 수열 $A$가 주어진다. $i$번 자료구조가 큐라면 $A_i = 0$, 스택이라면 $A_i = 1$이다. 셋째 줄

www.acmicpc.net

 

풀이 과정 

 

 

- B 수열의 각 한자리마다 원소가 최대 1개인 큐 혹은 스택으로 이루어져 있음

- 수열 C의 원소를 하나씩 queuestack에 넣어가면서 해당 B 수열의 자료구조에 따라 올바른 처리를 해야 함 

 

 

-  queustatck을 보면 자료구조가 스택인 부분은 변화가 없음 

  -> 스택에 push한 후 pop 한다면 가장 최근의 요소가 나오기 때문

 

- queue 자료구조인 원소들만 따로 모아 새로운 queue 자료구조를 만들고 원소를 삽입하면서 삭제되는 원소 출력 

- Deque 이용 

 

import java.util.Scanner;
import java.util.LinkedList;
import java.util.Deque;


public class Main 
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        
        Deque<Integer> deque = new LinkedList<>();
        
        int n = sc.nextInt();
        
        int A[] = new int[n];
        for(int i=0; i<n; i++)
        {
            A[i] = sc.nextInt(); //0110
        }
        
        int B[] = new int[n];
        for(int i=0; i<n; i++)
        {
        	B[i] = sc.nextInt(); //1234
        }
        
        int m = sc.nextInt();
        
        int C[] = new int[m];
        for(int i=0; i<m; i++)
        {
            C[i] = sc.nextInt(); //247
        }
        
        
        for(int i=0; i<n; i++)
        {
        	if(A[i]==0)
        		deque.addLast(i+1);
        }
        
        for(int i=0; i<m; i++)
        {
        	deque.addFirst(C[i]); // 수열 C 삽입
        	System.out.print(deque.removeLast()+" "); //뒤에서 제거하고 출력
        }

    }
}

 

 

참고 블로그 

 

[백준] 24511번 : queuestack (스택/큐 실버Ⅲ) - Java — 채야미랑 꽁냥꽁냥 (tistory.com)

 

[백준] 24511번 : queuestack (스택/큐 실버Ⅲ) - Java

문제 https://www.acmicpc.net/problem/24511 24511번: queuestack 첫째 줄에 queuestack을 구성하는 자료구조의 개수 $N$이 주어진다. ($1 \leq N \leq 100\,000$) 둘째 줄에 길이 $N$의 수열 $A$가 주어진다. $i$번 자료구조가

chaeyami.tistory.com

 

 

정답 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.util.ArrayDeque;
import java.util.Deque;


public class Main 
{
    public static void main(String[] args)  throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        Deque<Integer> deque = new ArrayDeque<>();
        
        int n = Integer.parseInt(br.readLine());
        
        int A[] = new int[n]; //0 1 1 0
        int B[] = new int[n]; //1 2 3 4
        
        StringTokenizer st1 = new StringTokenizer(br.readLine());
        for(int i=0; i<n; i++)
        {
            A[i] = Integer.parseInt(st1.nextToken());
        }
        
        StringTokenizer st2 = new StringTokenizer(br.readLine());
        for(int i=0; i<n; i++)
        {
            B[i] = Integer.parseInt(st2.nextToken());
        }
        
        
        int m = Integer.parseInt(br.readLine());
        
        int C[] = new int[m]; //2 4 7
        StringTokenizer st3 = new StringTokenizer(br.readLine());
        for(int i=0; i<m; i++)
        {
            C[i] = Integer.parseInt(st3.nextToken());
        }
        
        for(int i=0; i<n; i++)
        {
        	if(A[i]==0)
        	{
        		deque.addFirst(B[i]);
        	}
        }
        
        for(int i=0; i<m; i++)
        {
        	deque.add(C[i]);
        	bw.write(deque.pollFirst()+" ");
        }
       
        bw.flush();
        bw.close();

    }
}

 

 

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 24723 녹색거탑  (0) 2024.02.15
[JAVA] 백준 15439 베라의 패션  (0) 2024.02.15
[JAVA] 백준 2346 풍선 터뜨리기  (0) 2024.02.15
[JAVA] 백준 28279 덱 2  (0) 2024.02.14
[JAVA] 백준 11866 요세푸스 문제 0  (1) 2024.02.14