문제 링크 : https://www.acmicpc.net/problem/16926
처음 시도에는 배열의 외각을 돌리는 거 말고는 해결하지 못하였다.
그래서 배열 돌리기의 기초가 되는 백준 달팽이 문제를 풀면서 기초를 다지고 다시 풀었다.
문제를 해결하는 원리를 이해하여 풀었고 어느 정도 힌트를 기억하고 있어서 문제를 푸는데 수월하였다.
이 문제가 어렵게 느껴진다면 달팽이 문제를 풀고 다시 도전하기 바란다.
[BOJ] 달팽이 1913.JAVA
문제 링크 : https://www.acmicpc.net/problem/1913 달팽이 문제는 백준 배열 돌리기 1, 배열 돌리기 문제를 먼저 접하게 되어 풀게 된 문제이다. 배열 돌리기 문제가 너무 어려웠다.. 배열 돌리기.
nkt-docs.tistory.com
배열 돌리기 1의 소스를 아래와 같이 공유한다.
public class 배열돌리기1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int n = Integer.parseInt(str[0]);
int m = Integer.parseInt(str[1]);
int t = Integer.parseInt(str[2]);
int[][] map = new int[n][m];
for(int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < m; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int min = Math.min(n, m);
int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};
for(int z = 0; z < t; z++) {
for(int i = 0; i < min/2; i++) {
int x = i;
int y = i;
int temp = map[x][y];
int idx = 0;
while(idx < 4) {
int xx = x + dx[idx], yy = y + dy[idx];
if(xx < i || yy < i || xx > n-i-1 || yy > m-i-1) {
idx++;
}else {
map[x][y] = map[xx][yy];
x = xx;
y = yy;
}
}
map[x+1][y] = temp;
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
sb.append(map[i][j]).append(" ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
}
'알고리즘 > 문제풀이 - 백준온라인저지' 카테고리의 다른 글
[BOJ] 배열 돌리기 17276.JAVA (0) | 2021.04.14 |
---|---|
[BOJ] 빗물 14719.JAVA (0) | 2021.04.14 |
[BOJ] 달팽이 1913.JAVA (0) | 2021.04.11 |
[BOJ] 토마토 7569.JAVA (0) | 2021.04.06 |
[BOJ] 전화번호 목록 5052.JAVA (0) | 2021.03.29 |