티스토리 뷰

1961. 숫자 배열 회전

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE&problemTitle=1961&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

// 210209

import java.io.*;
import java.util.*;

public class Solution_D2_1961_숫자배열회전 {
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int T = Integer.parseInt(br.readLine());
		
		for (int tc=1; tc<=T; tc++) {
			
			int N = Integer.parseInt(br.readLine());
			
			int[][] arr = new int[N][N];
			int[][] newArr = new int[N][N];
			int[][] res = new int[N][N*3];
				
			for(int i=0; i<N; i++) {
				st = new StringTokenizer(br.readLine(), " ");
				for (int j=0; j<N; j++) {
					arr[i][j] = Integer.parseInt(st.nextToken());
				}
			}
			
			// 회전하기
			for(int d=0; d<3; d++) {
				for(int r=0; r<N; r++) {
					for(int nr=0; nr<N; nr++) {
						newArr[nr][N-1-r] = arr[r][nr];
					}
				}
				
				// 배열 update
				for(int r=0; r<N; r++) {
					for(int c=0; c<N; c++) {
						arr[r][c] = newArr[r][c];
						res[r][c+N*d] = newArr[r][c];
					}
				}
			}

			System.out.println("#" + tc);
			for(int r=0; r<N; r++) {
				for (int c=0; c<3*N; c++) {
					if (c>0 && c%N==0) System.out.print(" ");
					System.out.print(res[r][c]);

				}
				System.out.println();
			}

		}
		br.close();
	} // main
}

 

자바에서 배열간 복사를 할 때
arr1 = arr2; // 로 하면 얕은 복사를 하기 때문에 arr1의 값이 바뀌면 arr2의 값도 바뀌게 된다.
깊은 복사를 하기 위해서
1. for문을 돌면서 복사를 하나씩 하거나
2. Collecion을 사용 - Arrays.copyOf(). Object.clone()

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함