[λ°±μ€]1874λ² μ€νμμ΄
λ¬Έμ
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
μ½λ(JAVA)
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
for(int i =0 ;i < n ; i++) arr[i] = Integer.parseInt(br.readLine());
int cnt = 1;
int i;
for(i =0 ; i < n ; i++) {
if(stack.isEmpty()) {
if(cnt>arr[i]) break;
stack.push(cnt++);
sb.append("+\n");
}
if(arr[i] > stack.peek()) {
if(cnt > arr[i]) break;
while(stack.peek() != arr[i]) {
stack.push(cnt++);
sb.append("+\n");
}
}
else if(arr[i] < stack.peek()) {
while(stack.peek() != arr[i]) {
stack.pop();
sb.append("-\n");
}
}
if(arr[i] == stack.peek()) {
stack.pop();
sb.append("-\n");
}
}
if(i != n || !stack.isEmpty()) System.out.println("NO");
else System.out.print(sb.toString());
}
}
μ€λͺ
μ λ ₯: BufferedReader
μΆλ ₯: StringBuilder
κΈ°λ³Έμ μΌλ‘,
νμ¬ λΉκ΅νκ³ μλ λ°°μ΄ κ°(arr[i])κ³Ό νμ¬ stackμ 맨 μμ κ°μ λΉκ΅.
If(arr[i] > stack.peek())μ΄λΌλ©΄,
μμ§ μ€νμ ν΄λΉ κ°(arr[i])κ° μλ€μ΄κ° μλ κ²½μ°μ΄λ―λ‘ stack.peek() == arr[i]κΉμ§ μ€νμ cntλ₯Ό push
If(arr[i] < stack.peek())μ΄λΌλ©΄,
μ€νμμ ν΄λΉ κ°μ΄ λ€μ΄μλ κ²½μ°μ΄λ―λ‘, stack.popκ°μ΄ arr[i]μΌλκΉμ§ pop
μ΄λ, μ£Όμ ν μ .
pushν λ, νμ¬ μ€νμ λ€μ΄κ° κ°(cnt)λ³΄λ€ λΉκ΅ ν κ°(arr[i])κ° λ ν¬λ€λ©΄
μ€νμλ κ³μ arr[i]λ³΄λ€ ν°κ°λ§ μμ΄κ² λκ³ , κ²°κ΅ λ¬΄ν루νλ₯Ό λκ² λ¨.
μ΄ λΆλΆμ λν λΆκΈ°λ¬Έμ μ νμ©ν΄μΌ λ©λͺ¨λ¦¬μ΄κ³Ό, μκ°μ΄κ³Όκ° λμ§ μμ (γγΈοΏ£γ)
λ°λ‘(λ΄ μ½λ κΈ°μ€!)
1
1
+
-
3
1
2
3
+
-
+
-
+
-
4
4
2
3
1
NO