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 |