[BOJ][Java] 18808. ์Šคํ‹ฐ์ปค ๋ถ™์ด๊ธฐ

2025. 11. 8. 23:05ยท๐Ÿ’ญ Problem Solving/Java

๋ฌธ์ œ ์ดํ•ด

  • n×m ๋…ธํŠธ๋ถ(paper)์— k๊ฐœ์˜ ์Šคํ‹ฐ์ปค๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋ถ™์ธ๋‹ค. (์šฐ์„ ์ˆœ์œ„: ์™ผ์ชฝ ์œ„)
  • ์ด๋ฏธ ๋ถ™์ธ ์นธ๊ณผ ๊ฒน์น˜๋ฉด ์•ˆ ๋˜๋ฉฐ, ํ•œ ๋ฒˆ ๋ถ™์ด๋ฉด ๊ณ ์ •.
  • ๋ชจ๋“  ์œ„์น˜์— ๋ถ™์ผ ์ˆ˜ ์—†์œผ๋ฉด ์Šคํ‹ฐ์ปค๋ฅผ 0°, 90°, 180°, 270° ํšŒ์ „ํ•˜์—ฌ ์‹œ๋„.
  • ์ตœ์ข…์ ์œผ๋กœ ์Šคํ‹ฐ์ปค๊ฐ€ ๋ถ™์€ ์นธ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ.

 

ํ’€์ด ํ๋ฆ„

1. ํƒ์ƒ‰

  • ํ˜„์žฌ ์Šคํ‹ฐ์ปค๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์™ผ์ชฝ ์œ„๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•œ๋‹ค.
  • (0,0)๋ถ€ํ„ฐ (n-r, m-c)๊นŒ์ง€ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ™•์ธํ•œ๋‹ค.

2. ์Šคํ‹ฐ์ปค ๋ถ™์ด๊ธฐ

  • ์Šคํ‹ฐ์ปค์™€ ์ข…์ด์˜ ์ถฉ๋Œ์„ ๊ฒ€์‚ฌํ•œ๋‹ค. (๋‘˜๋‹ค 1์ธ ๊ฒฝ์šฐ)
  • ํ•ด๋‹น ์œ„์น˜์— ์Šคํ‹ฐ์ปค์˜ 1์ธ ์นธ๊ณผ ์ข…์ด์˜ 1์ธ ์นธ์ด ํ•œ ๋ฒˆ์ด๋ผ๋„ ๊ฒน์น˜๋ฉด ์‹คํŒจ (return false)
  • ์ „๋ถ€ ์•ˆ ๊ฒน์น˜๋ฉด ์ข…์ด์— ์Šคํ‹ฐ์ปค๋ฅผ ๋ถ™์ธ๋‹ค. (๋ถ™์ด๋Š” ์œ„์น˜์˜ paper ๊ฐ’ = 1)

3. ํšŒ์ „

  • ์œ„์—์„œ ์Šคํ‹ฐ์ปค๋ฅผ ๋ชป ๋ถ™์˜€์œผ๋ฉด 90° ํšŒ์ „ํ•˜๊ณ  1~2๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰.
    • ํ–‰(r)๊ณผ ์—ด(c)์„ ๋ฐ”๊พธ๊ณ  newSticker[i][j] = sticker[c - j - 1][i];
  • ๋ถ™์ผ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ 3๋ฒˆ ํšŒ์ „ํ•œ๋‹ค.
  • 4๋ฒˆ์˜ ์‹œ๋„๋ฅผ ๋ชจ๋‘ ์‹คํŒจ๋ฉด ์ด ์Šคํ‹ฐ์ปค๋Š” ๋ฒ„๋ฆฐ๋‹ค.

4. ์Šคํ‹ฐ์ปค ๋ถ™์ธ ์นธ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

  • ๋ชจ๋“  ์Šคํ‹ฐ์ปค ์ฒ˜๋ฆฌ ํ›„ paper๊ฐ€ 1์ธ ์œ„์น˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.

 

1, 2์—์„œ boolean์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์—ฌ, 2๋ฅผ ์‹คํŒจํ•  ์‹œ 1์„ ์žฌ์‹œ๋„ํ•˜๊ณ , 1์„ ์‹คํŒจํ•  ์‹œ 3์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

 

์ฝ”๋“œ

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

public class Main {
    static int n, m;
    static int r, c;
    static int[][] paper;
    static int[][] sticker;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        paper = new int[n][m];

        while (k-- > 0) {
            st = new StringTokenizer(br.readLine());
            r = Integer.parseInt(st.nextToken());
            c = Integer.parseInt(st.nextToken());
            sticker = new int[r][c];

            for (int i = 0; i < r; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < c; j++) {
                    sticker[i][j] = Integer.parseInt(st.nextToken());
                }
            } // ์ž…๋ ฅ ๋

            for (int i = 0; i < 4; i++) {
                if (search())
                    break;
                rotate();
            }
        }

        System.out.println(calcSum());
    }

    static boolean search() { // ๋ถ™์ผ ๊ณต๊ฐ„ ํƒ์ƒ‰
        for (int i = 0; i <= n - r; i++) {
            for (int j = 0; j <= m - c; j++) {
                if (put(i, j))
                    return true;
            }
        }

        return false;
    }

    static boolean put(int startR, int startC) { // ์Šคํ‹ฐ์ปค ๋ถ™์ด๊ธฐ
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                if (sticker[i][j] == 1 && paper[startR + i][startC + j] == 1)
                    return false;
            }
        }

        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                if (sticker[i][j] == 1) {
                    paper[startR + i][startC + j] = 1;
                }
            }
        }
        return true;
    }

    static void rotate() { // ์Šคํ‹ฐ์ปค ํšŒ์ „
        r = sticker[0].length;
        c = sticker.length;

        int[][] newSticker = new int[r][c];

        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                newSticker[i][j] = sticker[c - j - 1][i];
            }
        }

        sticker = newSticker;
    }

    static int calcSum() {
        int sum = 0;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (paper[i][j] == 1)
                    sum++;
            }
        }

        return sum;
    }

}

'๐Ÿ’ญ Problem Solving > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ][Java] 11437. LCA  (0) 2025.10.28
[BOJ][Java] 21608. ์ƒ์–ด ์ดˆ๋“ฑํ•™๊ต  (3) 2025.10.21
[BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ  (0) 2025.10.15
[BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด  (0) 2025.10.01
[BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)  (0) 2025.09.24
'๐Ÿ’ญ Problem Solving/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ][Java] 11437. LCA
  • [BOJ][Java] 21608. ์ƒ์–ด ์ดˆ๋“ฑํ•™๊ต
  • [BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ
  • [BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (42)
        • C++ (28)
        • Java (14)
      • ๐Ÿ“ Study (17)
        • React (1)
        • Java (16)
      • ๐Ÿ’ป CS (11)
        • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ (2)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    git
    ๋ฐฑํŠธ๋ž˜ํ‚น
    .h
    dfs
    42๊ฒฝ์‚ฐ
    La Piscine
    github
    unity
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    react
    ๋งต
    BFS
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    swea
    knapsack
    ์ •๋ ฌ
    VR
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    CSS
    ๊ตฌํ˜„
    C
    dynamic programming
    ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ
    HTML
    CS
    java
    makefile
    ํŠธ๋ฆฌ
    ๋ฐฑ์ค€
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[BOJ][Java] 18808. ์Šคํ‹ฐ์ปค ๋ถ™์ด๊ธฐ
์ƒ๋‹จ์œผ๋กœ

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