๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2529_๋ถ€๋“ฑํ˜ธ

๋ฟŒ์•ผ._. 2023. 12. 1. 14:37

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/2529)

< ๋ถ€๋“ฑํ˜ธ >

 

๋ฌธ์ œ ํ’€์ด 

 

๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ๊ตฌํ•˜๋ฉด์„œ ๋ถ€๋“ฑํ˜ธ์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’๋งŒ ๋‹ค์Œ ๊ฐ’์œผ๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

 

 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.StringTokenizer;

public class _2529_ { // ๋ถ€๋“ฑํ˜ธ
	static int num[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	static char arr[];
	static int result[];
	static boolean visited[];
	static String max, min;

	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 k = Integer.parseInt(bf.readLine());

		arr = new char[k];
		st = new StringTokenizer(bf.readLine());
		for (int i = 0; i < k; i++) {
			arr[i] = st.nextToken().charAt(0);
		}

		result = new int[k + 1];
		visited = new boolean[10];
		max = "-1";
		min = "100000000000";

		search(0, k);

		bw.write(max+"\n"+min);
		bw.flush();
	}

	private static void search(int idx, int k) {
		if (idx == k + 1) {
			String answer = "";
			for (int i = 0; i < k + 1; i++) {
				answer += result[i];
			}
			if (Long.parseLong(max) < Long.parseLong(answer)) {
				max = answer;
			}
			if (Long.parseLong(min) > Long.parseLong(answer)) {
				min = answer;
			}
			return;
		}
		for (int i = 0; i < 10; i++) {
			if (!visited[i]) {
				if (idx == 0) {
					result[idx] = num[i];
					visited[i] = true;
					search(idx + 1, k);
					visited[i] = false;
				} else {
					if (arr[idx - 1] == '<') {
						if (result[idx - 1] < num[i]) {
							result[idx] = num[i];
							visited[i] = true;
							search(idx + 1, k);
							visited[i] = false;
						}
					} else if (arr[idx - 1] == '>') {
						if (result[idx - 1] > num[i]) {
							result[idx] = num[i];
							visited[i] = true;
							search(idx + 1, k);
							visited[i] = false;
						}
					}
				}
			}
		}
	}
}
๋ณ€์ˆ˜)
num : 0~9๊นŒ์ง€ ์ €์žฅํ•œ ๋ฐฐ์—ด
arr : ๋ถ€๋“ฑํ˜ธ ์ •๋ณด
result : ์กฐํ•ฉ
visited : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
max, min : ์ตœ๋Œ€, ์ตœ์†Œ ์ •์ˆ˜
k : ๋ถ€๋“ฑํ˜ธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜

 

max์™€ min ๊ฐ’์€ ์กฐํ•ฉ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” -1๊ณผ 100000000000 ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”์‹œ์ผœ ์ค€๋‹ค. ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”์‹œํ‚จ ํ›„ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ „์ฒด ํƒ์ƒ‰ํ•˜๋ฉฐ ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฐ’์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์ด๋ผ๋ฉด ์–ด๋–ค ์ˆซ์ž๋˜์ง€ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ’์„ ๋„ฃ๊ณ  ๋‹ค์Œ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ถ€๋“ฑํ˜ธ๋ฅผ ๋ณด๊ณ  ๋ถ€๋“ฑํ˜ธ ์กฐ๊ฑด์— ์ผ์น˜ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ k+1๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋‹ค ๊ตฌํ–ˆ๋‹ค๋ฉด max์™€ min ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๊ฐ’์„ ๊ต์ฒดํ•œ๋‹ค.

 

์ตœ์ข… max์™€ min ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.