๋ฌธ์ ์ดํด
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 |