๊ธฐ๋ก๋ฐฉ

BOJ_15685 : ๋“œ๋ž˜๊ณค ์ปค๋ธŒ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_15685 : ๋“œ๋ž˜๊ณค ์ปค๋ธŒ

Soom_1n 2024. 5. 26. 15:19

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



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

  • ์ขŒํ‘œ๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” 101 x 101 ๊ฒฉ์žํŒ์ด ์žˆ๋‹ค.
  • N๋ฒˆ์˜ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์— ํ•œ ๊ฒฉ์ž์˜ ๋„ค ๊ผญ์ง“์ ์ด ๋ชจ๋‘ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์— ํฌํ•จ ๋œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ž€ ์„ธ๋Œ€๋ฅผ ๊ฑธ์น  ์ˆ˜๋ก ์ด์ „ ์„ธ๋Œ€์˜ ๋งˆ์ง€๋ง‰ ์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ์กด ์ปค๋ธŒ ๊ทธ๋ฆผ์„ 90๋„ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ ค ์ถ”๊ฐ€๋กœ ์ด์–ด ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ๋‹จ์ˆœ ๊ตฌํ˜„/์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ด๋‹ค. ์„ธ๋Œ€๋ฅผ ๋ฐ˜๋ณต ํ•  ๋•Œ, ์ด์ „ ์„ธ๋Œ€์˜ ํšŒ์ „ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ํšŒ์ „ ์ •๋ณด๋ฅผ ๋ˆ„์ ํ•ด์„œ ์ €์žฅํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ํฌ๊ธฐ๋Š” 2^์„ธ๋Œ€ ์ˆ˜์ด๋‹ค.
  • ์„ธ๋Œ€๋ฅผ ๋ฐ˜๋ณต ํ•  ๋•Œ๋งˆ๋‹ค ์ด์ „ ํšŒ์ „ ์ •๋ณด๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์กฐํšŒํ•ด์„œ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•  ๋•Œ๋Š” ์™ผ์ชฝ ์œ„ ๊ผญ์ง“์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฉ์žํŒ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ฒŒ ์กฐํšŒํ•œ๋‹ค.

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

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

public class Main {
    private static final int[] dx = {1, 0, -1, 0};
    private static final int[] dy = {0, -1, 0, 1};
    private static final int MAX = 100;
    private static boolean[][] board;
    private static int[] curves;

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

        int N = Integer.parseInt(br.readLine());
        board = new boolean[MAX + 1][MAX + 1];

        // Draw
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken()); // ์‹œ์ž‘ col ์ขŒํ‘œ
            int y = Integer.parseInt(st.nextToken()); // ์‹œ์ž‘ row ์ขŒํ‘œ
            int d = Integer.parseInt(st.nextToken()); // ์‹œ์ž‘ ๋ฐฉํ–ฅ
            int g = Integer.parseInt(st.nextToken()); // ๋“œ๋ž˜๊ณค ์ปค๋ธŒ ์„ธ๋Œ€์˜ ์ˆ˜

            curves = new int[(int) Math.pow(2, g)];
            curves[0] = d;

            draw(y, x, g);
        }

        // Count
        int cnt = 0;
        for (int i = 0; i < MAX; i++) {
            for (int j = 0; j < MAX; j++) {
                if (board[i][j] && board[i][j + 1] && board[i + 1][j] && board[i + 1][j + 1]) {
                    cnt++;
                }
            }
        }
        // Output
        bw.write(Integer.toString(cnt));
        bw.flush();
    }

    private static void draw(int row, int col, int g) {
        int idx = 0;
        int d = curves[idx];
        board[row][col] = true;
        row += dy[d];
        col += dx[d];
        board[row][col] = true;

        for (int i = 1; i <= g; i++) { // 1 ~ g์„ธ๋Œ€ ๊ณ„์‚ฐ
            for (int j = idx; j >= 0; j--) { // ์—ญ์ˆœ์œผ๋กœ ์ €์žฅ๋œ ๋ฐฉํ–ฅ ํ™•์ธ
                d = (curves[j] + 1) % 4; // ์ƒˆ๋กœ์šด ๋ฐฉํ–ฅ
                curves[++idx] = d;
                row += dy[d];
                col += dx[d];
                board[row][col] = true;
            }
        }
    }
}

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

  • ๋ฌธ์ œ์—์„œ ์ œ์‹œ ๋œ ๋ฐฉํ–ฅ ์ •๋ณด(์šฐ์ƒ์ขŒํ•˜)๋ฅผ dx, dy ๋ธํƒ€ ์ •๋ณด๋กœ ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ๊ฒฉ์žํŒ์˜ ๊ฐ ์นธ์ด ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์— ํฌํ•จ ๋˜๋Š”์ง€ boolean 2์ฐจ์› ๋ฐฐ์—ด board์— ์ €์žฅํ–ˆ๋‹ค.
  • ๋ˆ„์  ํšŒ์ „ ์ •๋ณด๋ฅผ int ๋ฐฐ์—ด curves์— ์ €์žฅํ–ˆ๋‹ค.
  • draw() ๋ฉ”์„œ๋“œ์—์„œ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ๊ตฌํ˜„ํ•ด board์— ํ‘œ์‹œํ–ˆ๋‹ค.
    • ์ตœ์ดˆ 0์„ธ๋Œ€๋Š” ๋ฌด์กฐ๊ฑด ์žˆ์œผ๋ฏ€๋กœ ์‹œ์ž‘ ์ขŒํ‘œ์™€ ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ board์— ํ‘œ์‹œํ•œ๋‹ค
    • ๋‹ค์Œ 1์„ธ๋Œ€ ๋ถ€ํ„ฐ๋Š” ๋„์ฐฉํ•˜๋Š” ์ขŒํ‘œ๋งŒ board์— ํ‘œ์‹œํ•œ๋‹ค.
  • ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ๋ชจ๋‘ ๊ทธ๋ฆฐ ํ›„์— ์™ผ์ชฝ์œ„ ๊ผญ์ง“์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋„ค ๊ผญ์ง“์ ์ด ๋ชจ๋‘ true์ธ ์นธ์„ ์ฐพ์•„ ์นด์šดํŠธํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ํŠน๋ณ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์—†๋Š” ๊ตฌํ˜„/์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์—ฌ์„œ ๋ง‰ํž˜์—†์ด ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธด ํ–ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๊ณ ๋ฏผ ์‹œ๊ฐ„ ์ž์ฒด๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ ธ๊ณ , ๋””๋ฒ„๊น…๋„ ๋”๋””๊ฒŒ ๋””์–ด์„œ 2์‹œ๊ฐ„์ด ํ›Œ์ฉ ๋„˜์–ด์„œ ํ’€์—ˆ๋‹ค.
    • 0๋ฒˆ์งธ ์„ธ๋Œ€์™€ ๊ทธ ์ดํ›„์˜ ์„ธ๋Œ€๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ƒ๊ฐํ•˜๊ธฐ๊นŒ์ง€๊ฐ€ ๊ฐ€์žฅ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.
    • ๋งˆ์šฐ์Šค๋„ ์—†์ด ๋…ธํŠธ๋ถ ํ„ฐ์น˜ํŒจ๋“œ๋กœ ํ’€์ดํ•ด์„œ ๋” ๋Š๋ ค์ง€๊ณ  ์ง‘์ค‘๋ ฅ๋„ ํ๋ ค์ง„ ๊ฒƒ ๊ฐ™๋‹ค.
  • curves์˜ ํฌ๊ธฐ ๊ณ„์‚ฐ์„ 2^์„ธ๋Œ€์ˆ˜๋กœ ์ž˜ ๊ณ„์‚ฐํ•ด ๋†“๊ณ , ๋””๋ฒ„๊น… ๊ณผ์ •์—์„œ 2^์„ธ๋Œ€์ˆ˜+1๋กœ ๋Š˜๋ ค์„œ ์ œ์ถœํ–ˆ๋‹ค. ์ˆ˜์ •ํ•ด์„œ ๋‹ค์‹œ ์ œ์ถœํ•˜๋Š๋ผ 3๋ฒˆ ์ œ์ถœํ•ด ๋ณด์•˜๋‹ค.
  • ํ’€์ด ๊ณ„ํš์„ ์ ์–ด๊ฐ€๋ฉฐ ํ’€์ดํ–ˆ๋‹ค.
728x90