https://www.acmicpc.net/problem/16926
1. 유형
구현
2. 문제 접근
- 사격형의 4개의 귀퉁이를 설정해 줍니다
- 사각형의 크기가 줄어들 때, 4개의 좌표를 다시 설정해줍니다
- 저것을 R번만큼 반복하면 종료
2번째 풀이.
저는 위처럼 사각형의 4개의 좌표를 구해서 해결했지만,
변수가 4개가 필요하고 각 방향마다 for문을 써줘서 코드가 더럽습니다.
그래서 BFS풀이 처럼 4방향의 배열을 구해주고, 범위를 나갔을 경우 다음 방향으로 진행하는 식으로 풀이해주는 것이
더 깔끔합니다.
3.코드
1번째 풀이
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine());
int N = stoi(st.nextToken());
int M = stoi(st.nextToken());
int K = stoi(st.nextToken());
int map[][] = new int[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < M; j++) {
map[i][j] = stoi(st.nextToken());
}
}
for (int i = 0; i < K; i++) {
int r1 = 0, c1 = 0, r2 = N - 1, c2 = M - 1;
while (r1 < r2 && c1 < c2) {
int temp = map[r1][c1];
for (int c = c1; c < c2; c++) {
map[r1][c] = map[r1][c + 1];
}
for (int r = r1; r < r2; r++) {
map[r][c2] = map[r + 1][c2];
}
for (int c = c2; c > c1; c--) {
map[r2][c] = map[r2][c - 1];
}
for (int r = r2; r > r1 + 1; r--) {
map[r][c1] = map[r - 1][c1];
}
map[r1 + 1][c1] = temp;
r1 += 1;
c1 += 1;
r2 -= 1;
c2 -= 1;
}
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++) {
for(int j=0;j<M;j++) {
sb.append(map[i][j]+" ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
static int stoi(String s) {
return Integer.valueOf(s);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 2422 - (Java) 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.08.25 |
---|---|
백준 20365 - (Java) 블로그2 (0) | 2021.08.24 |
백준 15565 - (Java) 귀여운 라이언 (0) | 2021.08.22 |
백준 13902 - (Java)개업 2 (0) | 2021.08.21 |
백준 16988 - (Java)Baaaaaaaaaduk2 (0) | 2021.08.19 |