-
[백준 16926] 배열 돌리기1Algorithm/Source Code 2022. 8. 11. 00:33반응형
문제
크기가 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] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5]
예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다.
1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2 7 8 2 9 8 7 6 → 5 6 8 2 → 1 7 6 3 5 4 3 2 9 5 4 3 5 9 5 4 <시작> <회전1> <회전2>
배열과 정수 R이 주어졌을 때, 배열을 R번 회전시킨 결과를 구해보자.
입력
첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.
둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.
출력
입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.
solution.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class P025_BJ16926_배열돌리기1{ public static void main(String[] args) throws IOException { StringBuilder sb = new StringBuilder(); // 시간초과날때 .. 쓰는 출력방법 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String[] input = bf.readLine().split(" "); int N = Integer.parseInt(input[0]); int M = Integer.parseInt(input[1]); int R = Integer.parseInt(input[2]); // 회전해야하는 수 int[][] map = new int[N][M]; for(int i=0;i<N;i++) { input = bf.readLine().split(" "); for(int j=0;j<M;j++) { map[i][j] = Integer.parseInt(input[j]); } } // 배열 입력받기 // 회전해야되는 라인의 수 int cnt = Math.min(N,M)/2; // 회전 해야하는 수 만큼 돌린다 for(int i=0;i<R;i++) { // 반시계방향은 좌하우상 for(int j=0;j<cnt;j++) { int tmp = map[j][j]; // 가장 마지막 값을 위해 .. for(int k=j+1; k<M-j; k++) map[j][k-1] = map[j][k]; for(int k=j+1; k<N-j; k++) map[k-1][M-1-j] = map[k][M-1-j]; for(int k=M-2-j; k>=j; k--) map[N-1-j][k+1] = map[N-1-j][k]; for(int k=N-2-j; k>=j; k--) map[k+1][j] = map[k][j]; map[j+1][j] = tmp; } } 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); } //main end }
출처
반응형'Algorithm > Source Code' 카테고리의 다른 글
[백준 17406] 배열 돌리기 4 (0) 2022.08.14 [백준 2961] 도영이가 만든 맛있는 음식 (0) 2022.08.11 [백준 1244] 스위치 켜고 끄기 (0) 2022.08.01 [SW Expert Academy] 1289. 원재의 메모리 복구하기 (0) 2022.08.01 [SW Expert Academy] 2070. 큰 놈, 작은 놈, 같은 놈 (0) 2022.07.28