๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ProgramSolve/Baekjoon

[BOJ] 2529๋ฒˆ - ๋ถ€๋“ฑํ˜ธ (Java)

by SooooooooS 2024. 3. 11.
728x90

๐Ÿ› ๏ธ ๋ฌธ์ œ ๐Ÿ› ๏ธ


๐Ÿ—’๏ธ ์„ค๋ช… ๐Ÿ—’๏ธ

๋ถ€๋“ฑํ˜ธ ๊ธฐํ˜ธ ์•ž๋’ค์— ์„œ๋กœ ๋‹ค๋ฅธ ํ•œ ์ž๋ฆฟ์ˆ˜ ์ˆซ์ž๋ฅผ ๋„ฃ์–ด์„œ ๋ชจ๋“  ๋ถ€๋“ฑํ˜ธ ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ๊ตฌํ•ด์•ผํ•œ๋‹ค.
→ ์ด ์ˆ˜์—ด์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 ๊ฐ ๋ถ€๋“ฑํ˜ธ์˜ ์•ž๋’ค์— ๋“ค์–ด๊ฐ€๋Š” ์ˆซ์ž๋Š” { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }์ค‘์—์„œ ์„ ํƒํ•ด์•ผ ํ•˜๋ฉฐ ์„ ํƒ๋œ ์ˆซ์ž๋Š” ๋ชจ๋‘ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.
→ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•  ๋ฐฐ์—ด์€ ์œ„์™€ ๊ฐ™๊ณ  ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ฐ’๋“ค๋กœ ์ด๋ค„์ง€๋„๋ก visited ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

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

์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ ์ฒซ ์ž๋ฆฌ๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋„ ์ •์ˆ˜์— ํฌํ•จํ•ด์•ผํ•œ๋‹ค. ์ฆ‰, 0123๊ณผ ๊ฐ™์ด ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค.

 

๋‚˜๋Š” ์ด๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด๋กœ ๋‹ต์„ ๊ตฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์† ๋น„๊ตํ•ด์„œ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ•œ ์ˆ˜์—ด์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘์€ ์ˆ˜๋ถ€ํ„ฐ ํฐ ์ˆ˜ ์ˆœ์„œ๋Œ€๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งŒ์•ฝ {1, 2, 3}์œผ๋กœ ์ˆ˜์—ด์„ ๊ตฌํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ๊ฐ’๋“ค์„ ๊ตฌํ•˜๋ฉด

  • 0๋ฒˆ ์ธ๋ฑ์Šค์˜ ๊ฐ’์€ ์ตœ์†Ÿ๊ฐ’
  • ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์˜ ๊ฐ’์€ ์ตœ๋Œ“๊ฐ’

์ด ๋  ๊ฒƒ์ด๋‹ค.


๐Ÿ€ ํ’€์ด ๐Ÿ€

package Baekjoon;

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

public class BrutueForce2529 {

    static String[] sign;
    static boolean[] visited;
    static ArrayList<String> answers;


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

        int k = Integer.parseInt(br.readLine());
        sign = br.readLine().strip().split(" ");

        visited = new boolean[10];
        answers = new ArrayList<>();

        dfs(0, k+1, new int[k+1]);

        bw.write(answers.get(answers.size()-1)+"\n");
        bw.write(answers.get(0));
        bw.flush();
        bw.close();
    }

    static void dfs(int count, int n, int[] result) {
        if(count == n) {
            if(isOk(result)) {
                String t = "";
                for(int i : result) {
                    t += i;
                }
                answers.add(t);
            }
            return;
        }

        for(int i = 0; i < 10; i++) {
            if(!visited[i]) {
                visited[i] = true;
                result[count] = i;
                dfs(count+1, n, result);
                visited[i] = false;
            }
        }
    }

    static boolean isOk(int[] result) {
        for(int i = 0; i < sign.length; i++) {
            if(sign[i].equals("<")) {
                if(result[i] > result[i+1]) {
                    return false;
                }
            }
            else {
                if(result[i] < result[i+1]) {
                    return false;
                }
            }
        }
        return true;
    }
}
728x90