πŸ“ μ•Œκ³ λ¦¬μ¦˜/자료ꡬ쑰

[λ°±μ€€]1874번 μŠ€νƒμˆ˜μ—΄

점이 2021. 8. 9. 22:38
λ°˜μ‘ν˜•

문제

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

 

λ°˜μ‘ν˜•