https://www.acmicpc.net/problem/1874
123456789를 순서대로 사용하고 stack에 push pop을 자유자재로 해서 주어진 수 배열을 만들 수 있을것인지?
만약 처음 4를 만나면 1,2,3,4를 push
하고 4를 pop
해야 함
그리고 다음 6을 만나면 5, 6까지 push
하고 6을 pop
이것을 반복하면 됨
int n = fr.nextInt(); // 입력받는 수
int plus = 1; // 1 ~ 9 올라가는 수
while(plus <= next) {
stack.push(plus);
sb.append("+\n"); // 출력을 위해 저장
plus++;
}
입력받은 수까지 될 때 까지 stack에 plus를 넣으면서 plus를 더함
if (stack.size() > 0 && stack.peek() == next) {
stack.pop();
sb.append("-\n");
}
스택의 마지막 수가 입력받은 수이면 pop
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
FastReader fr = new FastReader();
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
int n = fr.nextInt();
int plus = 1;
for (int i = 0; i < n; i++) {
int next = fr.nextInt();
while(plus <= next) {
stack.push(plus);
sb.append("+\n");
plus++;
}
if (stack.size() > 0 && stack.peek() == next) {
stack.pop();
sb.append("-\n");
}
else {
System.out.println("NO");
return;
}
}
System.out.println(sb);
}
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader(){
br = new BufferedReader(new InputStreamReader(System.in));
}
String next(){
while(st == null || !st.hasMoreTokens()){
try{
st = new StringTokenizer(br.readLine());
} catch (IOException e){
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt(){
return Integer.parseInt(next());
}
}
}
문제를 이해하는 데 어려움이 있어 차근차근 읽어봤다.
문제를 써가면서 이해하는 게 좋은 방법인 것 같다.