16926번: 배열 돌리기 1
크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]
www.acmicpc.net
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st.nextToken()); // 배열의 행
int m = Integer.parseInt(st.nextToken()); // 배열의 열
int r = Integer.parseInt(st.nextToken()); // 회전의 수
int[][] arr = new int[n][m]; // n * m 크기의 배열 생성
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()); // 각 원소의 값 저장
}
}
for (int k = 0; k < r; k++) { // r번 회전
int minR = 0, maxR = n - 1; // 초기값 세팅
int minC = 0, maxC = m - 1; // 초기값 세팅
while (minR <= maxR && minC <= maxC) { // 반복 조건
int temp = arr[minR][minC]; // 반시계로 돌려야하는데 이럴경우 한개의 값이 덮어씌워지므로 임시변수에 값 저장해놓음
for (int j = minC; j < maxC; j++) {
arr[minR][j] = arr[minR][j + 1]; // 상단
}
for (int i = minR; i < maxR; i++) { // 우측
arr[i][maxC] = arr[i + 1][maxC];
}
for (int j = maxC; j > minC; j--) { // 하단
arr[maxR][j] = arr[maxR][j - 1];
}
for (int i = maxR; i > minR; i--) { // 좌측
arr[i][minC] = arr[i - 1][minC];
}
arr[minR + 1][minC] = temp; // 임시변수에 저장해놓은거까지 저장
// 다음 둘레를 회전시키기 위해 시작/끝값 조정
minR++;
maxR--;
minC++;
maxC--;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
sb.append(arr[i][j]).append(" ");
}
sb.append("\n");
}
System.out.print(sb);
}
}
728x90
'알고리즘 > 구현' 카테고리의 다른 글
[백준][JAVA] 25206번 너의 평점은 (0) | 2024.01.30 |
---|---|
[백준][JAVA] 17413번 단어 뒤집기 2 (0) | 2024.01.24 |
[백준][JAVA] 1244번 스위치 켜고 끄기 (1) | 2023.12.18 |
[백준][JAVA] 2615번 오목 (1) | 2023.12.18 |