시간 & 메모리 제한
문제
입력 & 출력
문제 풀이
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. 마지막 출력을 해주면 끝이 납니다.
단순한 방향을 지정해서 푸는 수학 문제와 가깝다....
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_3040 백설 공주와 일곱 난쟁이(자바) / for문 or DFS (0) | 2021.04.04 |
---|---|
백준_7576 토마토(자바) / BFS (0) | 2021.04.03 |
백준_1946 신입 사원(자바) / 그리디 알고리즘 (0) | 2021.04.02 |
백준_10845 큐(자바) / 자료구조 (0) | 2021.04.02 |
백준_10844 쉬운 계단 수(자바) / DP (0) | 2021.04.01 |