๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 14540_Railway Station

๋ฟŒ์•ผ._. 2025. 11. 12. 11:40
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/14540)

< Railway Station >

 

๋ฌธ์ œ ํ’€์ด 

 

Stack 2๊ฐœ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

1) A ๋ฐฉํ–ฅ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ธฐ์ฐจ

2) ์—ญ ๋‚ด๋ถ€

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;

public class _14540_ { // Railway Station

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		int n = 0;
	
		while ((n = Integer.parseInt(bf.readLine())) != 0) {
			String str = "";

			while (!(str = bf.readLine()).equals("0")) {
				st = new StringTokenizer(str);

				int[] result = new int[n];
				int idx = 0;
				for (int i = 0; i < n; i++) {
					result[i] = Integer.parseInt(st.nextToken());
				}

				Stack<Integer> stack = new Stack<>();
				Stack<Integer> temp = new Stack<>();
				for (int i = n; i > 0; i--) {
					stack.add(i);
				}

				boolean flag = false;
				while (idx < n) {
					if (!stack.isEmpty() && stack.peek() == result[idx]) {
						stack.pop();
						idx++;
					} else if (!temp.isEmpty() && temp.peek() == result[idx]) {
						temp.pop();
						idx++;
					} else {
						if (!stack.isEmpty()) {
							temp.add(stack.pop());
						} else {
							flag = true;
							break;
						}
					}
				}
				if (flag) {
					bw.write("No\n");
				} else {
					bw.write("Yes\n");
				}
			}
			bw.write("\n");
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
n : ๊ธฐ์ฐจ ๊ฐ์ฐจ ๊ฐœ์ˆ˜
str : ์ž„์˜์˜ ์ˆœ์—ด
result : str์„ ๋ฐฐ์—ด๋กœ ์ €์žฅ
idx : result๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” index
stack : A๋ฐฉํ–ฅ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ฐ์ฐจ ์ˆœ์„œ
temp : ์—ญ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ์ฐจ ์ˆœ์„œ
flag : ์ˆœ์—ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€

 

๊ธฐ์ฐจ ๊ฐ์ฐจ ๊ฐœ์ˆ˜๊ฐ€ 0์ด ์•„๋‹ ๋•Œ๊นŒ์ง€ ์ž…๋ ฅ๋ฐ›์•„ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) 0์ด ์•„๋‹ ๋•Œ๊นŒ์ง€ ์ž„์˜์˜ ์ˆœ์—ด ์ž…๋ ฅ๋ฐ›์•„ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

1-1) ์ž…๋ ฅ๋ฐ›์€ ์ž„์˜์˜ ์ˆœ์—ด์„ ๋ฐฐ์—ด result์— ์ €์žฅํ•œ๋‹ค.

1-2) Stack์— A๋ฐฉํ–ฅ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ฐ์ฐจ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

1-3) A๋ฐฉํ–ฅ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ฐ์ฐจ๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ result [idx]์™€ ์ผ์น˜ํ•˜๋ฉด pop ํ•œ๋‹ค.

1-4) A๋ฐฉํ–ฅ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ฐ์ฐจ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ณ  ์—ญ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ์ฐจ๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ result [idx]์™€ ์ผ์น˜ํ•˜๋ฉด pop ํ•œ๋‹ค.

1-5) ๋‘˜ ๋‹ค ์ผ์น˜ํ•˜์ง€ ์•Š๊ณ  A๋ฐฉํ–ฅ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ฐ์ฐจ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฐจ๋ฅผ ์—ญ ๋‚ด๋ถ€์— ์ €์žฅํ•œ๋‹ค.

1-6) ๋‘˜ ๋‹ค ์ผ์น˜ํ•˜์ง€ ์•Š๊ณ  A๋ฐฉํ–ฅ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ฐ์ฐจ๊ฐ€ ๋‚จ์•„์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ˆœ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒํ•œ๋‹ค.

2) flag ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.