🟦/백준

[실버 1] 부등호

진뚱이용 2023. 7. 31. 14:39

https://www.acmicpc.net/problem/2529

 

2529번: 부등호

두 종류의 부등호 기호 ‘<’와 ‘>’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
	static String answer_max = "0";
	static String answer_min = "9999999999";

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;

		int k;
		String[] arr;

		k = Integer.parseInt(br.readLine());
		arr = new String[k];

		st = new StringTokenizer(br.readLine());

		for (int i = 0; i < k; i++)
			arr[i] = st.nextToken();

		//////////////////////////////////////////////

		boolean[] visited = new boolean[10];
		String tmp = "";

		for (int num = 0; num < 10; num++) {
			visited[num] = true;
			tmp += String.valueOf(num);
			recursion(arr, num, 0, visited, tmp);
			visited[num] = false;
			tmp = tmp.substring(0, tmp.length() - 1);
		}

		System.out.println(answer_max);
		System.out.println(answer_min);

	}

	public static void recursion(String[] arr, int num, int index, boolean[] visited, String tmp) {
		// 종료 조건
		if (index == arr.length) {

			if (Double.parseDouble(answer_max) < Double.parseDouble(tmp))
				answer_max = tmp;
			if (Double.parseDouble(answer_min) > Double.parseDouble(tmp))
				answer_min = tmp;

			return;
		}

		if (arr[index].equals(">")) {
			for (int i = num - 1; i >= 0; i--) {
				if (!visited[i]) {
					visited[i] = true;
					tmp += String.valueOf(i);
					recursion(arr, i, index + 1, visited, tmp);
					visited[i] = false;
					tmp = tmp.substring(0, tmp.length() - 1);
				}
			}
		} else {
			for (int i = num + 1; i <= 9; i++) {
				if (!visited[i]) {
					visited[i] = true;
					tmp += String.valueOf(i);
					recursion(arr, i, index + 1, visited, tmp);
					visited[i] = false;
					tmp = tmp.substring(0, tmp.length() - 1);
				}
			}
		}

	}
}

맨 처음 숫자는 아무거나 올 수 있다.

0~9 

그다음 숫자부터는 전 숫자의 부등호 생각 + 방문하지 않았어야 함

 

 

*9876543210 은 Integer 21억을 넘어서 Integer.parseInt 못 쓴다

String으로 들고 다니다가 Double.parseDouble로 비교