๊ธฐ๋ก๋ฐฉ

BOJ_10972 : ๋‹ค์Œ ์ˆœ์—ด ๋ณธ๋ฌธ

CodingTest/Java

BOJ_10972 : ๋‹ค์Œ ์ˆœ์—ด

Soom_1n 2023. 1. 14. 21:06

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

10972๋ฒˆ: ๋‹ค์Œ ์ˆœ์—ด

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆœ์—ด์˜ ๋‹ค์Œ์— ์˜ค๋Š” ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์‚ฌ์ „์ˆœ์œผ๋กœ ๋งˆ์ง€๋ง‰์— ์˜ค๋Š” ์ˆœ์—ด์ธ ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ˆœ์—ด์˜ ์ˆ˜ n๊ณผ ์ˆœ์—ด์ด ์ž…๋ ฅ๋œ๋‹ค.
    • ์ˆœ์—ด์„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ, ์ž…๋ ฅ ๋œ ์ˆœ์„œ์˜ ๋‹ค์Œ ์ˆœ์„œ์ธ ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • n์ด 1๋งŒ๊นŒ์ง€ ์ž…๋ ฅ๋˜๋ฏ€๋กœ, ์žฌ๊ท€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์‚ฌ์ „์ˆœ ์ •๋ ฌ์„ ๊ตฌํ˜„ํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค. (1๋งŒ ํŒฉํ† ๋ฆฌ์–ผ..?)
  • ์‚ฌ์ „ ์ˆœ ์ •๋ ฌ์€ ๋‹ค์‹œ ๋งํ•˜๋ฉด ์ˆœ์—ด์—์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์ด๋‹ค.
    • ์ˆœ์—ด์ด [1, 2, 3, 6, 5, 4]์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, 123654 ๋‹ค์Œ์œผ๋กœ ํฐ ์ˆ˜๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
    • 654๋งŒ ๋ดค์„๋•Œ ํ•ด๋‹น ์กฐํ•ฉ์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜์ด๋‹ค.(๋‚ด๋ฆผ์ฐจ์ˆœ)
    • ๊ทธ ๋‹ค์Œ์ˆ˜๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ์ด ์•„๋‹ˆ๊ฒŒ ๋˜๋Š” 3์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค.
      • ๋งŒ์•ฝ ์ด๋ฏธ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋ผ๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค. (๋ฌธ์ œ ์กฐ๊ฑด์˜ ์‚ฌ์ „์ˆœ์˜ ๋งˆ์ง€๋ง‰ ์ˆœ์—ด)
    • 6,5,4 ์ค‘ 3๋ณด๋‹ค ํฌ๋ฉด์„œ ์ตœ์†Œ๊ฐ’์€ 4์ด๋‹ค.(swap : 124653)
    • ๋’ค์— ๋‚จ์€ 653์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋ฐ”๋กœ ๋‹ค์Œ ์ˆœ์—ด์ด ๋œ๋‹ค. (124356)
      • ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐ”๊ฟ€ ๋•Œ 3๊ณผ 4๋ฅผ ๋ฐ”๊ฟจ์–ด๋„ ๋’ค์— 653์ค‘ 3์€ ์ตœ์†Œ๊ฐ’์ด ๋˜๋ฏ€๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ƒํƒœ์ด๋‹ค.
    • ๋ฐ”๋กœ ๋‹ค์Œ ์ˆœ์—ด ์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.Scanner;

public class Main {
    static int[] arr;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

        if (next_Permutation()) {
            for (int i : arr) {
                System.out.print(i + " ");
            }
        } else {
            System.out.println(-1);
        }
    }

    private static boolean next_Permutation() {
        int i = arr.length - 1;
        while (i > 0 && arr[i - 1] >= arr[i]) { // 1
            i--;
        }
        if (i == 0) {
            return false;
        }

        int j = arr.length - 1;
        while (arr[i - 1] >= arr[j]) {		// 2
            j--;
        }

        swap(i - 1, j);

        j = arr.length - 1;
        while (i < j) {				// 3
            swap(i, j);
            i++;
            j--;
        }
        return true;
    }

    private static void swap(int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • 1) ์ธ๋ฑ์Šค i๋ฅผ ์ˆœ์—ด ๋์—์„œ๋ถ€ํ„ฐ 0๊นŒ์ง€ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด ์•„๋‹Œ ๋ถ€๋ถ„์„ ์ฐพ๋Š”๋‹ค.
    • i๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋ฉด, ์ด๋ฏธ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆœ์—ด์ด๋ฏ€๋กœ -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • 2) ์ธ๋ฑ์Šค j๋ฅผ ์ˆœ์—ด ๋์—์„œ๋ถ€ํ„ฐ i๊นŒ์ง€ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ arr[j]๊ฐ€ arr[i-1]๋‹ค ํฐ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š”๋‹ค.
    • i-1 ๋’ค์ชฝ์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์—์„œ i-1๋ณด๋‹ค ํฐ ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ฐพ์€ j์ธ๋ฑ์Šค์˜ ๊ฐ’์„ i-1์ธ๋ฑ์Šค์˜ ๊ฐ’๊ณผ ๊ตํ™˜ํ•œ๋‹ค.
  • 3) i-1 ๋’ค์ชฝ์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
    • ์ฒ˜์Œ๊ณผ ๋ ์ธ๋ฑ์Šค๊ฐ€ ์ค‘์•™์—์„œ ๋งŒ๋‚  ๋•Œ ๊นŒ์ง€ ์•ž/๋’ค๋ฅผ ๊ตํ™˜ํ•˜๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋œ๋‹ค.(==์ˆœ์—ด์„ ๋’ค์ง‘๋Š”๋‹ค)

๐Ÿ”ธ ์˜ค๋‹ต ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    static int[] arr;
    static Integer[] last;
    static boolean print = false;

    private static void dfs(ArrayList<Integer> temp) {
        if (temp.size() == arr.length) {
            boolean flag = true;
            if (print) {
                for (int i : temp) {
                    System.out.print(i + " ");
                }
                System.exit(0);
            } else {
                for (int i = 0; i < arr.length; i++) {
                    if (temp.get(i) != arr[i]) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    print = true;
                }
            }
        } else {
            for (int i = 1; i <= arr.length; i++) {
                if (!temp.contains(i)) {
                    temp.add(i);
                    dfs(temp);
                    temp.remove(temp.size() - 1);
                }
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        arr = new int[n];
        last = new Integer[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
            last[i] = arr[i];
        }

        Arrays.sort(last, Collections.reverseOrder());

        boolean flag = true;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != last[i]) {
                flag = false;
                break;
            }
        }
        if (flag) {
            System.out.println(-1);
        }
        else
            dfs(new ArrayList<>());
    }
}
  • ์‚ฌ์ „์‹ ์ •๋ ฌ์„ ์žฌ๊ท€ ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค.
  • ์ž…๋ ฅ๋œ ์ˆœ์—ด๊ณผ ๊ฐ™์€ ์ˆœ์—ด์„ ์ฐพ์œผ๋ฉด, ๋ฐ”๋กœ ๋‹ค์Œ ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์˜ˆ์ œ๋Š” ํ†ต๊ณผํ•˜์ง€๋งŒ, ์ œ์ถœ ์‹œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์‚ฌ์ „์‹ ์ •๋ ฌ์„ ์žฌ๊ท€ ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„ํ•ด์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
  • ์ •๋‹ต ์ฝ”๋“œ์˜ 3๋ฒˆ while๋ฌธ์˜ ์กฐ๊ฑด์„ (i != j)๋กœ ํ•ด์„œ, i๊ฐ€ j๋ณด๋‹ค ์ปค์ง€๊ณ  ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.
  • ์žฌ๊ท€ ๋ฉ”์†Œ๋“œ ๋ฐฉ์‹์ด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ž ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผ ํ•  ์ง€ ๋ชฐ๋ผ์„œ ์ •๋‹ต ํฌ์ŠคํŒ…์„ ์ฐพ์•„๋ณด์•˜๋‹ค.
    • ์‚ฌ์ „์‹ ์ •๋ ฌ๋œ ์ƒํƒœ์— ๋Œ€ํ•ด์„œ ์žฌ๊ท€ ๋ฐฉ์‹๋งŒ ์•Œ์•˜๋Š”๋ฐ, ์ƒˆ๋กœ์šด ํŠน์„ฑ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. (๋‚ด๋ฆผ์ฐจ์ˆœ ์ฐพ๊ธฐ)
    • swap๊ณผ ๋ฌธ์ œ ํ’€์ด ๋ฉ”์†Œ๋“œ๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_3085 : ์‚ฌํƒ• ๊ฒŒ์ž„  (0) 2023.01.15
BOJ_2304 : ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•  (0) 2023.01.15
BOJ_2563 : ์ƒ‰์ข…์ด  (0) 2023.01.13
BOJ_4948 : ๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€  (0) 2023.01.12
BOJ_11653 : ์†Œ์ธ์ˆ˜๋ถ„ํ•ด  (0) 2023.01.12