CS/알고리즘_문제풀이(자바)

배열 돌리기 1

Jedy_Kim 2021. 11. 23. 21:13
728x90

https://www.acmicpc.net/problem/16926

 

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

 

// 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.util.*;
import java.io.*
 
public class Main {    
  
  static int N, M, R, CNT;
  static int[][] arr, temp;
  
  
  // main  
  public static void main( String[] args ) throws Exception {
    
    // Please Enter Your Code Here 
    BufferedReader br  = new BufferedReader( new InputStreamReader( System.in ) );
    BufferedWriter bw  = new BufferedWriter( new OutputStreamWriter( System.out ) );
    StringTokenizer st = new StringTokenizer( br.readLine() );
    
    N   = Integer.parseInt( st.nextToken() );
    M   = Integer.parseInt( st.nextToken() );
    R   = Integer.parseInt( st.nextToken() );
    arr = new int[N][];
    for ( int i = 0; i < N; ++i ) arr[i] = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    
    // 회전해야할 사각형의 개수
    CNT = Math.min( N, M ) / 2;
    
    // 주어진 조건만큼 회전시킨다
    while ( R --> 0 ) roatate();
    
    // 답을 구한다. 
    StringBuilder sb = new StringBuilder();
    for ( int[] ar1 : arr ) {
      for ( int ar2 : ar1 ) sb.append(ar2 + " ");
      sb.append("\n");
    }
      
    bw.write(sb.toString());
     
    bw.flush();
    bw.close();
    br.close(); 
  }   
  
  
  // 회전 메서드
  static void roatate() {
    
    temp = new int[N][M];
    for ( int i = 0; i < CNT; ++i ) { // 사각형을 모두 돌리는 반복문.
      
      int row = i, col = i;
      // 상단 행을 돌린다
      for ( ; col < M - i - 1++col ) temp[row][col] = arr[row][col + 1];
      temp[row][col] = arr[++row][col];
      
      // 우측 열을 돌린다.
      for ( ; row < N - i - 1++row ) temp[row][col] = arr[row + 1][col];
      temp[row][col] = arr[row][--col];
      
      // 하단 열을 돌린다.
      for ( ; col > i; --col ) temp[row][col] = arr[row][col - 1];
      temp[row][col] = arr[--row][col];
       
      // 좌측 열을 돌린다.
      for ( ; row > i; --row ) temp[row][col] = arr[row - 1][col];
      
    } // 사각형을 모두 돌리는 반복문 종료 
    arr = temp;
    
  }// 회전 메서드 종료 
  
cs

 

반응형

'CS > 알고리즘_문제풀이(자바)' 카테고리의 다른 글

소수&팰린드롬  (0) 2021.11.29
배열 돌리기 2  (0) 2021.11.24
배열 돌리기 3  (0) 2021.11.22
1, 2, 3 더하기 4  (0) 2021.11.19
팰린드롬?  (0) 2021.11.18