Algorithm/백준 알고리즘
백준_16926 배열 돌리기1(자바)
미스터로즈
2021. 4. 3. 11:43
시간 & 메모리 제한
문제
입력 & 출력
문제 풀이
package com.Back;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back_16926 {
// 우 하 좌 상
static int[] dx = { 0, 1, 0, -1 };
static int[] dy = { 1, 0, -1, 0 };
public static void main(String[] args) throws Exception {
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 rotate = Integer.parseInt(st.nextToken());
int[][] map = new int[N][M];
// 값 받아오기
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int rotaGroup = N > M ? M : N;
for (int i = 0; i < rotate; i++) {
for (int j = 0; j < rotaGroup / 2; j++) {
int x = j;
int y = j;
int temp = map[x][y];
int dir = 0;
while (dir < 4) {
int xx = x + dx[dir];
int yy = y + dy[dir];
if(xx>=j && xx<N-j && yy>=j && yy<M-j) {
map[x][y] = map[xx][yy];
x = xx;
y = yy;
}else {
dir++;
}
}
map[j+1][j] = temp;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
System.out.print(map[i][j]+" ");
}
System.out.println();
}
}
}
Step1. 입력값을 받습니다.
Step2. for문을 통해서 값을 미뤄주는 계획을 세웁니다.
Step3. 값을 미뤄줄때는 방향을 잡고, 차례로 밀어주면 됩니다.
Step4. 마지막 출력을 해주면 끝이 납니다.
단순한 방향을 지정해서 푸는 수학 문제와 가깝다....