๋ฌธ์
https://www.acmicpc.net/problem/16926
๋ฌธ์ ์ดํด
- ์ฃผ์ด์ง
n x mํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก r๋ฒ ํ์ ์ํจ๋ค. - ๋ฐฐ์ด์ ์ฌ๋ฌ ๊ฒน์ ๋ ์ด์ด(ํ ๋๋ฆฌ)๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ฐ ํ์ ๋ง๋ค ๋ฐ๊นฅ์ชฝ ๋ ์ด์ด๋ถํฐ ์์ชฝ ๋ ์ด์ด๊น์ง ์์ฐจ์ ์ผ๋ก ํ์ ์ํจ๋ค.
๋ฌธ์ ํ์ด
- ๋ฐฐ์ด์ ํ์ ๊ฐ๋ฅํ ๋ ์ด์ด ์: ๋ฐฐ์ด์ ๊ฐ์ฅ ์งง์ ๋ณ์ ์ ๋ฐ๋งํผ ๋ ์ด์ด๊ฐ ์กด์ฌํ๋ค.
line = Math.min(n, m) / 2 r๋ฒ ํ์ ํ ๋์, ๊ฐ ๋ ์ด์ด์ ๋ํด 4๋ฐฉํฅ ์ด๋์ ๋ฐ๋ณต ์ํ- ํ์ ํ ๋๋ ํ์ฌ ์์น์์ ๋ค์ ์์น๋ก ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ ํ๋ฏ๋ก ๋งจ ์ฒ์ ๊ฐ์ ์์ ์ ์ฅํด๋๊ณ ๋ง์ง๋ง์ ์ฑ์ ๋ฃ๋๋ค.
ํ์ ๊ณผ์
- ๊ฐ ๋ ์ด์ด์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์์๋ฅผ ํ ์นธ์ฉ ์ด๋
- → ์ค๋ฅธ์ชฝ: ์ข์ธก ์ด → ์ฐ์ธก ์ด (0, +1)
- ↓ ์๋์ชฝ: ์๋จ ํ → ํ๋จ ํ (+1, 0)
- ← ์ผ์ชฝ: ์ฐ์ธก ์ด → ์ข์ธก ์ด (0, -1)
- ↑ ์์ชฝ: ํ๋จ ํ → ์๋จ ํ (-1, 0)
- ๋ฐฉํฅ ์ ํ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฐฉํฅ ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
ํ์ ๋ฒ์
๋ ์ด์ด i์ ๋ํด ์ด๋ ๊ฐ๋ฅํ ๋ฒ์
- ํ(row):
i๋ถํฐn - i - 1๊น์ง - ์ด(col):
i๋ถํฐm - i - 1๊น์ง
๋ ์ด์ด i ๊ตฌ์ฑ
(i, i) → (i, m - i - 1)
↓ ↓
(n - i - 1, i) ← (n - i - 1, m - i - 1)
์ฝ๋
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// ์
๋ ฅ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
int[][] arr = new int[n][m];
int layer = Math.min(n, m) / 2; // ํ์ ๋ ์ด์ด ์
// ์ผ์ชฝ์ผ๋ก, ์๋ก, ์ค๋ฅธ์ชฝ์ผ๋ก, ์๋๋ก
int[] dr = { 0, 1, 0, -1 };
int[] dc = { 1, 0, -1, 0 };
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
// ์ฐ์ฐ
while (r-- > 0) {
for (int i = 0; i < layer; i++) {
int idx = 0; // ๋ฐฉํฅ
int row = i, col = i;
int temp = arr[i][i]; // ์ฒซ ๋ฒ์งธ ๊ฐ ์ ์ฅํด๋๊ธฐ
while (idx < 4) {
int nr = row + dr[idx];
int nc = col + dc[idx];
if (nr < i || nc < i || nr >= n - i || nc >= m - i) { // ๋ฒ์ ๋ฒ์ด๋๋ฉด
idx++;
continue;
}
arr[row][col] = arr[nr][nc];
row = nr;
col = nc;
}
arr[i + 1][i] = temp;
}
}
// ์ถ๋ ฅ
StringBuilder sb = new StringBuilder();
for (int[] rows : arr) {
for (int i : rows) {
sb.append(i).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}'๐ญ Problem Solving > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ][Java] 14503. ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2025.09.03 |
|---|---|
| [SWEA][Java] 3421. ์์ ๋ฒ๊ฑฐ ์ฅ์ธ (4) | 2025.08.29 |
| [BOJ][Java] 1946. ์ ์ ์ฌ์ (1) | 2025.08.26 |
| [BOJ][Java] 2492. ๋ณด์ (0) | 2025.08.20 |
| [SWEA][Java] 5215. ํ๋ฒ๊ฑฐ ๋ค์ด์ดํธ (4) | 2025.07.18 |