λ¬Έμ
λ¬Έμ λ§ν¬ https://www.acmicpc.net/problem/1874
- μ€νμ μλ£λ₯Ό λ£λ (push) μ ꡬμ μλ£λ₯Ό λ½λ (pop) μ κ΅¬κ° κ°μ μ μΌ λμ€μ λ€μ΄κ° μλ£κ° μ μΌ λ¨Όμ λμ€λ (LIFO, Last in First out) νΉμ±μ κ°μ§κ³ μλ€.
- 1λΆν° nκΉμ§μ μλ₯Ό μ€νμ λ£μλ€κ° λ½μ λμ΄λμμΌλ‘μ¨, νλμ μμ΄μ λ§λ€ μ μλ€.
- μ΄λ, μ€νμ pushνλ μμλ λ°λμ μ€λ¦μ°¨μμ μ§ν€λλ‘ νλ€κ³ νμ.
- μμμ μμ΄μ΄ μ£Όμ΄μ‘μ λ μ€νμ μ΄μ©ν΄ κ·Έ μμ΄μ λ§λ€ μ μλμ§ μλμ§, μλ€λ©΄ μ΄λ€ μμλ‘ pushμ pop μ°μ°μ μνν΄μΌ νλμ§λ₯Ό μμλΌ μ μλ€. μ΄λ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νλΌ.
- 첫 μ€μ n (1 ≤ n ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° nκ°μ μ€μλ μμ΄μ μ΄λ£¨λ 1μ΄μ nμ΄νμ μ μκ° νλμ© μμλλ‘ μ£Όμ΄μ§λ€. λ¬Όλ‘ κ°μ μ μκ° λ λ² λμ€λ μΌμ μλ€.
- μ λ ₯λ μμ΄μ λ§λ€κΈ° μν΄ νμν μ°μ°μ ν μ€μ ν κ°μ© μΆλ ₯νλ€. pushμ°μ°μ +λ‘, pop μ°μ°μ -λ‘ νννλλ‘ νλ€. λΆκ°λ₯ν κ²½μ° NOλ₯Ό μΆλ ₯νλ€.
μμ΄λμ΄
- λ§λ€μ΄μΌ λλ μμ΄μ λ¨Όμ λ°μλκ³ λ°°μ΄μ μ μ₯ν ν, 1λΆν° nκΉμ§ stackμ νλμ© λ£μΌλ©΄μ μ°μ°κ²°κ³Ό λ°°μ΄μ ' + 'λ₯Ό λ£μ΄μ£Όκ³ stackμ κΌλκΈ° κ°κ³Ό λ§λ€μ΄μΌλλ μμ΄μ ν΄λΉ λ²μ§Έμ μ«μκ° κ°λ€λ©΄ μ°μ°κ²°κ³Ό λ°°μ΄μ ' - 'λ₯Ό λ£μ΄μ£Όκ³ stack μ μΌ μ μ«μλ₯Ό λΉΌμ κ²°κ³Ό λ°°μ΄μ λ£λλ€.
- whileλ¬Έμ ν΅ν΄μ κΌλκΈ°κ° κ°μΌλ©΄ κ³μν΄μ λΉΌμ£Όκ³ λ§μ½ κ°μ§ μκ±°λ stackμ΄ λΉμμ κ²½μ° whileλ¬Έμ μ’ λ£νκ³ λ€μ forλ¬ΈμΌλ‘ λμκ°μ λ€μ μ«μλ₯Ό stackμ λ£λλ€.
- μμ κ³Όμ μ λ°λ³΅νλ©° nκΉμ§ λͺ¨λ μ λ ₯νμ κ²½μ°, λ°λ³΅λ¬Έμ λλ΄κ³ λ§μ½ stackμ λ¨μ μ«μλ€μ΄ μλ€λ©΄ λ°λ‘ forλ¬Έμ ν΅ν΄μ κ²°κ³Όλ°°μ΄μ μμλλ‘ λ£μ΄μ€λ€.
- κ·Έλ κ² λ§λ κ²°κ³Όλ°°μ΄κ³Ό λ§λ€μ΄μΌλλ μμ΄ λ°°μ΄μ λΉκ΅νμ λ, λ λ°°μ΄μ΄ κ°λ€λ©΄ μ°μ°κ²°κ³Όλ₯Ό(' + ' μ ' - 'λ₯Ό λ£μ λ°°μ΄) μΆλ ₯νκ³ κ°μ§ μλ€λ©΄ 'NO'λ₯Ό μΆλ ₯νλ€.
κ²ͺμ μνμ°©μ€
- X
μ½λ
import java.io.*;
import java.util.*;
public class BOJ1874 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
// λ§λ€μ΄μΌλ μμ΄
int cal[] = new int[n];
// κ²°κ³Ό λ°°μ΄
int result[] = new int[n];
// stackμ κ³μ°ν stack
Stack<Integer> s = new Stack<>();
List<String> out = new ArrayList<>();
// μμλλ‘ μ«μλ₯Ό λ£μ΄μ€
for(int i = 0; i < n; i++){
int num = Integer.parseInt(br.readLine());
cal[i] = num;
}
// λ§λ€μ΄μΌλ μμ΄μ μλ²
int cnt = 0;
// 1λΆν° nκΉμ§ λ°λ³΅
for(int i = 1; i <= n; i++){
// iλ₯Ό stackμ λ£μ
s.push(i);
// stackμ λ£μμΌλ―λ‘ λ°°μ΄μ + μΆκ°
out.add("+");
while(true){
// λ§μ½ λ§λ€μ΄μΌλλ μμ΄μ ν΄λΉ μλ² μ«μμ
// stackμ κΌλκΈ° μ«μκ° κ°λ€λ©΄
// stackμμ κΌλκΈ° κ°μ μ κ±° ν
// κ²°κ³Όκ° μ μ₯ λ°°μ΄μ - μΆκ°
// κ·Έλ¦¬κ³ κ²°κ³Ό λ°°μ΄μ ν΄λΉ μ«μ μΆκ°
if(cal[cnt] == s.peek()){
out.add("-");
result[cnt] = s.peek();
s.pop();
// λ€μ μλ²μΌλ‘ λμ΄κ°
cnt = cnt + 1;
}
// λ§μ½ λκ°μ μ«μκ° κ°μ§ μλ€λ©΄ whileλ¬Έ μ’
λ£
else{
break;
}
// λ§μ½ κ²°κ³Όλ°°μ΄μ λκΉμ§ λ€ λ€μ΄κ°κ±°λ stackμ΄ λΉμλ€λ©΄
// whileλ¬Έ μ’
λ£
if(cnt == (n - 1) || s.isEmpty()){
break;
}
}
}
// nκΉμ§ λͺ¨λ μ
λ ₯μ νμΌλ―λ‘ stackμ λ¨μ
// μ«μλ λͺ¨λ λΉΌλ λ°©λ²λ°μ μμ
for(int i = 0; i < s.size(); i++){
out.add("-");
result[cnt] = s.peek();
s.pop();
// λ€μ μλ²μΌλ‘ λμ΄κ°
cnt = cnt + 1;
}
// λ μμ΄μ΄ κ°μμ§ νλ³ν λ³μ
boolean same = true;
// λ§λ€μ΄μΌλλ μμ΄κ³Ό λ§λ μμ΄μ΄ κ°μμ§ λΉκ΅
for(int i = 0; i < n; i++){
if(cal[i] != result[i]){
same = false;
break;
}
}
// λ§μ½ λ μμ΄μ΄ κ°λ€λ©΄ μ°μ°κ²°κ³Όλ₯Ό μ μ₯ν λ°°μ΄μ μΆλ ₯
if(same){
for(int i = 0; i < out.size(); i++){
sb.append(out.get(i) + "\n");
}
System.out.println(sb);
}
// κ°μ§ μλ€λ©΄ NO μΆλ ₯
else{
System.out.println("NO");
}
}
}
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] BOJ 11047 λμ 0 (2) | 2024.07.23 |
---|---|
[Java] BOJ 1764 λ£λ³΄μ‘ (2) | 2024.07.23 |
[Java] BOJ 1654 λμ μλ₯΄κΈ° (10) | 2024.07.22 |
[Java] BOJ 2108 ν΅κ³ν (2) | 2024.07.22 |
[Java] BOJ 1966 νλ¦°ν° ν (0) | 2024.07.21 |