백준
백준 스택 - 1874번 : 스택 수열
맴썰
2022. 2. 28. 17:53
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는 그대로 출력할 수 있다.