Zayson
A to Zayson!
Zayson
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • ์™„์ „ํƒ์ƒ‰(Brute-Force) (3)
      • ๊ทธ๋ฆฌ๋””(Greedy) (6)
      • ํˆฌํฌ์ธํ„ฐ(Two-Pointer) (1)
      • ๊ทธ๋ž˜ํ”„(Graph) (5)
      • BFS & DFS (9)
      • ๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜(Implementation) (5)
      • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • ํšŒ๊ณ  (5)
      • ์—”๋นต ํ”„๋กœ์ ํŠธ ํฌ์ŠคํŠธ ๋กœ๋“œ๋งต (1)
      • 2022๋…„ (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • ๊ธฐ์ˆ  ์„œ์  (6)
      • ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ (3)
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •๋ณตํ•ด์•ผํ•  ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ ๋””์ž์ธ ํŒจํ„ด (2)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • BFS
  • Kafka Connect
  • Computer science
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • CS
  • ์™„์ „ํƒ์ƒ‰
  • ๊ทธ๋ฆฌ๋””
  • kafka
  • SpringBoot
  • ๋ผ์ด๋ธŒ์Šคํ„ฐ๋””
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์ž…๋ฌธ
  • JPA
  • ๋‚˜ ํ˜ผ์ž ์Šคํ”„๋ง๋ถ€ํŠธ!
  • ๋ฐฑ์ค€
  • ๊ตฌํ˜„
  • ์—”๋นตํ”„๋กœ์ ํŠธ
  • dfs
  • spring boot
  • Backend
  • Java

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Zayson

A to Zayson!

[๋ฐฑ์ค€, Java] 1039๋ฒˆ : ๊ตํ™˜
Algorithm/BFS & DFS

[๋ฐฑ์ค€, Java] 1039๋ฒˆ : ๊ตํ™˜

2022. 7. 22. 13:55

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

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

๐Ÿ˜ฎ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ฃผ์–ด์ง„ ์ˆซ์ž M์— ๋Œ€ํ•ด์„œ ์ž๋ฆฟ์ˆ˜ ๊ตํ™˜์ด K๋ฒˆ ์ผ์–ด๋‚ฌ์„ ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

  1. ์ž๋ฆฟ์ˆ˜ i๋ณด๋‹ค ์ž๋ฆฟ์ˆ˜ j๊ฐ€ ๋” ์ปค์•ผํ•˜๋Š” ์ œํ•œ ์กฐ๊ฑด์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฆฟ์ˆ˜์˜ ์ˆœ์„œ์Œ์„ ๋ชจ๋‘ ๊ตฌํ•œ๋‹ค.
  2. ๋ชจ๋‘ ๊ตฌํ•œ ์ˆœ์„œ์Œ๊ณผ ํ•จ๊ป˜ ์ดˆ๊ธฐ์— ์ฃผ์–ด์ง„ M ๊ฐ’๊ณผ K = 0์ธ ์ƒํƒœ๋กœ ํ์— ๋„ฃ์–ด์ค€๋‹ค.
  3. ๋งค ํ„ด ๋งˆ๋‹ค ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์ˆœ์„œ์Œ์„ ์ด์šฉํ•ด ๊ตฌํ•œ๋‹ค.
    1. ํ์˜ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค.
    2. ์ˆœ์„œ์Œ์„ ์ด์šฉํ•ด ์ž๋ฆฟ์ˆ˜ ๊ตํ™˜์ด ์ด๋ค„์กŒ์„ ๋•Œ ๊ฐ’์„ ์ฒดํฌํ•œ๋‹ค.
    3. ์ด๋ฏธ ํ˜„์žฌ ํ„ด์— ๊ตํ™˜ํ•œ ์ˆซ์ž๊ฐ€ ๋‚˜์™”๊ฑฐ๋‚˜ 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ๊ฐ’์€ ํ์— ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
    4. ๋งŒ์•ฝ ํ„ด์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” Set์—๋‹ค๊ฐ€ ๋„ฃ์–ด์ฃผ๊ณ  ํ์—๋Š” ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
    5. ์ด์™ธ์˜ ๊ฒฝ์šฐ๋ผ๋ฉด ๋ณ€๊ฒฝํ•œ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆœ์„œ์Œ์„ ๋ฐ˜๋ณตํ•ด์„œ ํ์— ๋„ฃ์–ด์ค€๋‹ค.
  4. ๋ชจ๋“  ํ„ด์„ ๋Œ๊ณ  Set์— ๋“ค์–ด๊ฐ„ ๊ฐ’ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋ฉด๋œ๋‹ค.

โœ”๏ธ  ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„์€ ํ์—์„œ ์ค‘๋ณต๋˜๋Š” ๊ฐ’์„ ์ฒดํฌ๋ฅผ ์•ˆํ•ด์ค˜์„œ ๋‚ฌ์—ˆ๋‹ค. ์ค‘๋ณต์ ์œผ๋กœ ๋‚˜์˜ค๋ˆˆ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด ์ฒดํฌํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์ฃผ์š”ํ–ˆ๋‹ค.

๐Ÿšฉ Java ์ฝ”๋“œ

package com.second.algorithm.baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;

public class Main_1039_๊ตํ™˜ {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        String N = st.nextToken();
        int K = Integer.parseInt(st.nextToken());

        int rst = changeNumber(N, K);
        System.out.println(rst);

        br.close();
    }

    private static int changeNumber(String n, int k) {
        if(n.length() == 1) return -1;
        if(n.length() == 2 && n.contains("0")) return -1;

        // ์ˆœ์„œ์Œ ๊ตฌํ•˜๊ธฐ
        List<Pair> pairs = getPairs(n.length());

        // ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ํ๋กœ ๋ณ€ํ™˜
        Queue<Possible> queue = pairs.stream()
                .map(pair -> new Possible(n, pair.getFirst(), pair.getSecond(), 1))
                .collect(Collectors.toCollection(LinkedList::new));

        // ์…‹์„ ์ด์šฉํ•ด ์ค‘๋ณต ์ œ๊ฑฐ
        Set<String> available = new HashSet<>();

        while (!queue.isEmpty()) {
            int size = queue.size();
            boolean[] check = new boolean[1000001];

            // ํ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋Œ๋ฆฌ๊ธฐ
            for (int loop = 0; loop < size; loop++) {
                Possible possibleNumber = queue.poll();

                String number = possibleNumber.getNumber();
                int firstIndex = possibleNumber.getFirst();
                int secondIndex = possibleNumber.getSecond();
                int turn = possibleNumber.getTurn();

                String afterSwap = swapNumber(firstIndex, secondIndex, number);

                // ์ด๋ฏธ ํ•ด๋‹น ํ„ด์— ์ฒดํฌํ–ˆ๊ฑฐ๋‚˜, 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์ œ์™ธ
                if (afterSwap.startsWith("0") || check[Integer.parseInt(afterSwap)]) continue;
                check[Integer.parseInt(afterSwap)] = true;

                // ํ„ด์„ ๋‹ค ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ
                if (turn == k) {
                    available.add(afterSwap);
                    continue;
                }

                // ๋ณ€๊ฒฝ๋œ ๊ฐ’ ํ์— ๋„ฃ๊ธฐ
                for (Pair pair : pairs) {
                    queue.add(new Possible(afterSwap, pair.getFirst(), pair.getSecond(), turn + 1));
                }
            }
        }

        // ์ตœ๋Œ€๊ฐ’ ๊ตฌํ•˜๊ธฐ
        return available.stream().mapToInt(Integer::parseInt).max().getAsInt();
    }

    // ์ˆซ์ž ๊ตํ™˜
    private static String swapNumber(int firstIndex, int secondIndex, String n) {
        return n.substring(0, firstIndex) + n.charAt(secondIndex) +
                n.substring(firstIndex + 1, secondIndex) + n.charAt(firstIndex) + n.substring(secondIndex + 1);
    }

    // ์ž๋ฆฟ์ˆ˜ ๊ตํ™˜ ๊ฐ€๋Šฅ ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋‹ด๊ธฐ
    private static List<Pair> getPairs(int m) {
        List<Pair> pairs = new ArrayList<>();
        for (int first = 0; first < m; first++) {
            for (int second = first + 1; second < m; second++) {
                pairs.add(new Pair(first, second));
            }
        }

        return pairs;
    }

    static class Pair {
        private int first;
        private int second;

        public Pair(int first, int second) {
            this.first = first;
            this.second = second;
        }

        public int getFirst() {
            return first;
        }

        public int getSecond() {
            return second;
        }
    }

    static class Possible {
        private String number;
        private int first;
        private int second;
        private int turn;

        public Possible(String number, int first, int second, int turn) {
            this.number = number;
            this.first = first;
            this.second = second;
            this.turn = turn;
        }

        public String getNumber() {
            return number;
        }

        public int getFirst() {
            return first;
        }

        public int getSecond() {
            return second;
        }

        public int getTurn() {
            return turn;
        }
    }
}
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithm > BFS & DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€, Java] 14226๋ฒˆ : ์ด๋ชจํ‹ฐ์ฝ˜  (0) 2022.07.27
[๋ฐฑ์ค€, Java] 19621๋ฒˆ : ํšŒ์˜์‹ค ๋ฐฐ์ • 2  (0) 2022.05.23
[๋ฐฑ์ค€, Java] 9934๋ฒˆ : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ  (0) 2022.05.20
[๋ฐฑ์ค€, Java] 16928๋ฒˆ : ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„  (0) 2022.05.09
[๋ฐฑ์ค€, Java] 1967๋ฒˆ : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„  (0) 2022.05.08
    'Algorithm/BFS & DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋ฐฑ์ค€, Java] 14226๋ฒˆ : ์ด๋ชจํ‹ฐ์ฝ˜
    • [๋ฐฑ์ค€, Java] 19621๋ฒˆ : ํšŒ์˜์‹ค ๋ฐฐ์ • 2
    • [๋ฐฑ์ค€, Java] 9934๋ฒˆ : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
    • [๋ฐฑ์ค€, Java] 16928๋ฒˆ : ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„
    Zayson
    Zayson
    ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”