๊ธฐ๋ก๋ฐฉ

BOJ_3109 : ๋นต์ง‘ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_3109 : ๋นต์ง‘

Soom_1n 2023. 2. 22. 23:41

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

 

3109๋ฒˆ: ๋นต์ง‘

์œ ๋ช…ํ•œ ์ œ๋นต์‚ฌ ๊น€์›์›…์€ ๋นต์ง‘์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค. ์›์›…์ด์˜ ๋นต์ง‘์€ ๊ธ€๋กœ๋ฒŒ ์žฌ์ • ์œ„๊ธฐ๋ฅผ ํ”ผํ•ด๊ฐ€์ง€ ๋ชปํ–ˆ๊ณ , ๊ฒฐ๊ตญ ์‹ฌ๊ฐํ•œ ์žฌ์ • ์œ„๊ธฐ์— ๋น ์กŒ๋‹ค. ์›์›…์ด๋Š” ์ง€์ถœ์„ ์ค„์ด๊ณ ์ž ์—ฌ๊ธฐ์ €๊ธฐ ์ง€์ถœ์„ ์‚ดํŽด๋ณด๋˜

www.acmicpc.net



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

  • R x C ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด์˜ 0๋ฒˆ ์—ด๋ถ€ํ„ฐ C-1๋ฒˆ ์—ด๊นŒ์ง€ ํŒŒ์ดํ”„๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•œ๋‹ค.
  • '.' ์—๋Š” ํŒŒ์ดํ”„๋ฅผ ๋†“์„ ์ˆ˜ ์žˆ๊ณ , 'x'์—๋Š” ๋†“์„ ์ˆ˜ ์—†๋‹ค.
  • ์ฒซ ์—ด๊ณผ ๋ ์—ด์€  '.' ๋กœ๋งŒ ์ฑ„์›Œ์ ธ์žˆ๋‹ค.
  • ํŒŒ์ดํ”„๋Š” ์˜ค๋ฅธ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋กœ๋งŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋†“์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ดํ”„์˜ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ํ’€์ด ์ „๋žต ๐Ÿ”ธ

  • R์ด ์ตœ๋Œ€ 1๋งŒ, C๊ฐ€ ์ตœ๋Œ€ 500์ด๋ฏ€๋กœ ํšจ์œจ์ ์ธ ์„ ํƒ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.(๊ทธ๋ฆฌ๋””)
  • ์ตœ๋Œ€ํ•œ ๋งŽ์€ ํŒŒ์ดํ”„๋ฅผ ๋‘๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€๋Šฅํ•œ ์œ„์ชฝ์œผ๋กœ ํŒŒ์ดํ”„๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • 0๋ฒˆ ์—ด์˜ 0๋ฒˆ ํ–‰๋ถ€ํ„ฐ R-1๋ฒˆ ํ–‰๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์‹œ์ž‘ ์œ„์น˜๋กœ ์‚ผ๋Š”๋‹ค.
  • DFS์™€ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ†ตํ•ด ํŒŒ์ดํ”„๊ฐ€ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.
    • ํ•œ ์ขŒํ‘œ์—์„œ ์šฐ์ƒ, ์šฐ, ์šฐํ•˜ ์ˆœ์œผ๋กœ ํƒ์ƒ‰(์žฌ๊ท€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ) ํ•œ๋‹ค.
    • ๋งŒ์•ฝ ํŒŒ์ดํ”„๊ฐ€ ์—ฐ๊ฒฐ ๋๋‹ค๋ฉด, ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋‘ ์ค‘์ง€ํ•ด์•ผ ํ•œ๋‹ค. (ํŒŒ์ดํ”„๊ฐ€ ๋‘ ๊ฐˆ๋ž˜๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก)
    • ํŒŒ์ดํ”„๋ฅผ ๋†“์„ ์ˆ˜ ์—†๋”๋ผ๋„ ์ฒดํฌํ•ด๋‘”๋‹ค. (์ค‘๋ณต์œผ๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋„๋ก)
  • ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ(state space tree) ํ˜•์‹์ด๊ธฐ๋„ ํ•˜๋‹ค.

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    private static int r, c;
    private static char[][] pipeline;
    private static int[] dx = {-1, 0, 1}; // ์šฐ์ƒ, ์šฐ, ์šฐํ•˜
    private static int[] dy = {1, 1, 1}; // ์šฐ์ƒ, ์šฐ, ์šฐํ•˜

    private static boolean pipe(int x, int y) {
//        print();
        if (y == c - 1) return true;

        for (int i = 0; i < 3; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (0 <= nx && nx < r && 0 <= ny && ny < c && pipeline[nx][ny] == '.') {
                pipeline[nx][ny] = 'X';
                if (pipe(nx, ny)) return true;
            }
        }
        return false;
    }

    private static void print() {
        System.out.println("=======================================");
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                System.out.print(pipeline[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) throws IOException {
        // input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());

        pipeline = new char[r][c];
        for (int i = 0; i < r; i++) {
            pipeline[i] = br.readLine().toCharArray();
        }

        // recursion
        int answer = 0;
        for (int i = 0; i < r; i++) {

            if (pipe(i, 0)) answer++;
        }

        // output
        System.out.println(answer);
    }
}

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

  • r * c ํฌ๊ธฐ์˜ ๊ฒฉ์ž๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด pipeline์— ๊ธฐ๋กํ•˜๋ฉฐ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค. (์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ)
  • 0์—ด์˜ ์‹œ์ž‘ ํ–‰ ๋ฒˆํ˜ธ๋ฅผ 0๋ถ€ํ„ฐ r-1 ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์„ ํƒํ•˜๋ฉฐ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.
  • pipe() ๋ฉ”์„œ๋“œ
    • ํ˜„์žฌ ์œ„์น˜์—์„œ ์šฐ์ƒ, ์šฐ, ์šฐํ•˜ ์ˆœ์œผ๋กœ ์ง„ํ–‰ ๊ฐ€๋Šฅํ•˜๋ฉด ํŒŒ์ดํ”„๋ฅผ ๋†“์œผ๋ฉฐ ๋‹ค์‹œ pipe() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ๊ท€ ํ˜ธ์ถœํ•œ๋‹ค.
    • ๋งŒ์•ฝ ๋(c-1์—ด)๊นŒ์ง€ ํŒŒ์ดํ”„๋ฅผ ๋†“์•˜๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ, true๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ ๋ชจ๋“  ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.
    • ํŒŒ์ดํ”„๋ฅผ ๋†“์ง€ ๋ชปํ•ด false๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๋”๋ผ๋„, ์ด๋ฏธ ๋†“์€ ํŒŒ์ดํ”„ (์ด๋ฏธ ๊ฒ€์‚ฌํ•ด์„œ 'X'๋ฅผ ์ฑ„์›€) ๋ฅผ ๋‹ค์‹œ '.'์œผ๋กœ ๋ฐ”๊พธ์ง„ ์•Š๋Š”๋‹ค. (์ค‘๋ณต ๊ฒ€์‚ฌ ๋ฐฉ์ง€ : ์–ด์ฐจํ”ผ ๋‹ค๋ฅธ ํŒŒ์ดํ”„๊ฐ€ ์—ฌ๊ธฐ์— ๋˜ ๋†“๋”๋ผ๋„ ์‹คํŒจํ•  ๊ฒƒ์ž„)
  • ํŒŒ์ดํ”„๊ฐ€ ๋๊นŒ์ง€ ๋„๋‹ฌํ•œ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๊ณจ๋“œ 2 ๋ฌธ์ œ์˜€์ง€๋งŒ, ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋น„์Šทํ•œ ๋ฌธ์ œ์ธ BOJ_6987_์›”๋“œ์ปต ์„ ํ’€๊ณ  ์ด์–ด์„œ ํ’€์ดํ•ด์„œ ๊ฐ„๋‹จํžˆ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์›”๋“œ์ปต ๋ณด๋‹ค ๋‚œ์ด๋„๊ฐ€ ๋†’์€ ์ฃผ์š” ํฌ์ธํŠธ๋Š” boolean ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ, ๊ฐ€๋Šฅํ•œ ์šฐ์ƒ๋‹จ ์ชฝ์œผ๋กœ ํŒŒ์ดํ”„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ทธ๋ฆฌ๋”” ์  ์„ ํƒ, ์ด๋ฏธ ๊ฒ€์‚ฌํ•œ ์ขŒํ‘œ๋Š” ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์  3๊ฐ€์ง€ ์ด๋‹ค.
    • ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ๋ฐฉ์ง€ํ•˜์ง€ ์•Š์•„์„œ 1ํšŒ ํ‹€๋ ธ๋‹ค. (x๋ฅผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ '.'์„ ์ฑ„์› ์—ˆ๋‹ค.)

728x90

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

BOJ_1717 : ์ง‘ํ•ฉ์˜ ํ‘œํ˜„  (0) 2023.03.08
BOJ_1926 : ๊ทธ๋ฆผ  (0) 2023.03.05
BOJ_6987 : ์›”๋“œ์ปต  (0) 2023.02.21
BOJ_4963 : ์„ฌ์˜ ๊ฐœ์ˆ˜  (0) 2023.02.21
BOJ_17281 : โšพ  (0) 2023.02.20