https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
import java.util.*;
import java.io.*;
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));
int n = Integer.parseInt(br.readLine());
int[] target = new int[n];
int[] result = new int[n];
StringBuilder ans = new StringBuilder();
int cur = 0;
int idx = 0;
StringBuilder str = new StringBuilder();
for(int i=0; i<n; i++) {
target[i] = Integer.parseInt(br.readLine());
str.append(target[i]);
}
Stack<Integer> s = new Stack<>();
int num=1;
while(idx<n) {
if(target[cur]>num) {
s.push(num);
ans.append("+\n");
num++;
continue;
}
if(target[cur]==num){
s.push(num);
ans.append("+\n");
int temp = s.pop();
ans.append("-\n");
result[idx++] = temp;
cur++;
num++;
continue;
}
if(target[cur]<num) {
int temp = s.pop();
ans.append("-\n");
result[idx++] =temp;
cur++;
continue;
}
}
String temp = Arrays.toString(result).replaceAll("[^0-9]","");
if(!temp.equals(str.toString()))bw.write("NO");
else {
bw.write(ans+"");
}
bw.close();
}
}
import java.util.*;
import java.io.*;
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));
int n = Integer.parseInt(br.readLine());
int[] target = new int[n];
StringBuilder ans = new StringBuilder();
int cur = 0;
StringBuilder str = new StringBuilder();
for(int i=0; i<n; i++) {
target[i] = Integer.parseInt(br.readLine());
str.append(target[i]);
}
Stack<Integer> s = new Stack<>();
for(int i=1; i<=n; i++) {
s.push(i);
ans.append("+\n");
while(!s.isEmpty()&&s.peek()==target[cur]) {
s.pop();
ans.append("-\n");
cur++;
}
}
if(!s.isEmpty())bw.write("NO");
else {
bw.write(ans+"");
}
bw.close();
}
}
받을 숫자가 하나일 경우 stringbuilder 사용하지 않고 바로 readline을 int로
Stringbuilder는 그대로 출력할 수 있다.
'백준' 카테고리의 다른 글
| 백준 큐 - 1966번 : 프린터 큐 (0) | 2022.03.02 |
|---|---|
| 백준 이분탐색 - 1920번 : 수 찾기 (0) | 2022.03.02 |
| 백준 이분탐색 - 1654번 : 랜선 자르기 (0) | 2022.02.28 |
| 백준 동적계획법 - 1463번 : 1로 만들기 (0) | 2022.02.27 |
| 백준 동적계획법 - 2579번 : 계단 오르기 (0) | 2022.02.17 |