[JAVA] SWEA 1961 숫자 배열 회전
2022. 7. 9.
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq 

 

SW Expert Academy

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

swexpertacademy.com

 

1. 서론

 

그냥 배열을 돌리는 문제 (feat. 문자열) 근데 난 배열 돌리는 거 진짜 자신 없어서 쫄았는데 그냥 단순하고 쉬운 문제다.

 

2. 문제 설명

 

NxN의 배열이 주어지고 그 배열을 90도, 180도, 270도를 돌리는 문제다.

근데 특이한건 이걸 각각 출력하는 게 아니라 옆으로 쭉 붙여서 출력하는 문제다.

눈으로 봤을 때는 당연하고 쉬워 보이지만 개발하는 입장에서는 가로세로가 따로 노는데 붙이라고 하니 까다로울 수밖에...(하지만 이걸 해결하는 것까지가 문제, 공백 포함)

 

 

 

 

 

 

배열을 숫자로 각각의 값을 받고 i, j의 값을 조절해서 for문을 통해 문자열에 옮겨 적는다.

 

1) 90도인 경우

맨 아랫줄, 즉 i값이 n-1부터 0으로 올라오며 그 값을 각 문자열 배열의 첫 번째 값으로 적어준다. 이때 하나씩 적고 바로 다음 줄로 넘겨야 한다.

 

2) 180도인 경우

90도인 경우와는 다르게 한 줄에 j값을 n-1부터 다 적어준 후에 다음 줄로 넘어간다. i값은 동일하게 n-1부터 움직인다.

 

3) 270도인 경우

위의 경우들과 다르게 i값이 오름차순이며 90도인 경우와 동일하게 하나씩 적고 다음줄로 넘겨준다.

 

그리고 1,2,3을 수행하면서 각 문자열의 마지막에 공백 문자를 넣어줘야 한다.

 

 

 

 

 

 

3. 코드 설명

 

import java.util.*;

public class Solution {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int t = s.nextInt();
		
		for (int k = 0; k < t; k++)
		{
			int n = s.nextInt();
			
			int[][] a = new int[n][n];
			for (int i = 0; i < n; i++)
				for (int j = 0; j < n; j++)
					a[i][j] = s.nextInt();
			
			String[] str = new String[n];
			Arrays.fill(str, "");
			
			int x = 0;
			for (int i = n - 1; i >= 0; i--){
				for (int j = 0; j < n; j++) 
					str[x++] += Integer.toString(a[i][j]);
				x = 0;
			}
			for (int i = 0; i < str.length; i++)
				str[i] += " ";
		
			x = 0;
			for (int i = n - 1; i >= 0; i--){
				for (int j = n - 1; j >= 0; j--) 
					str[x] += Integer.toString(a[i][j]);
				x++;
			}
			for (int i = 0; i < str.length; i++)
				str[i] += " ";
		
			x = 0;
			for (int i = 0; i < n; i++){
				for (int j = n - 1; j >= 0; j--) 
					str[x++] += Integer.toString(a[i][j]);
				x = 0;
			}
			
			System.out.println("#" + (k + 1));
			for (int i = 0; i < str.length; i++)
				System.out.println(str[i]);
		}
	}
}

 

위의 적었던 방법을 그대로 구현했다.

x라는 변수를 넣어서 문자열의 자리값을 이동했다. 첫 줄만 쓰고 바로 옮겨야 할 때는 ++로 다음 줄로 넘어가고 아닌 경우에는 j를 다 돌고 ++하면 된다. 처음에는 for문을 하나 더 넣어야 하나 했는데 저렇게 하면 반복문 추가 없이 가볍게 사용 가능하다.

 

그리고 새로 알게 된 문법!!

문자열 배열을 선언하고 그냥 바로 선언하면 null값이 디폴트로 들어있기 때문에 null뒤에 값이 들어가게 된다.

이를 방지하기 위해 문자열을 ""로 초기화하기 위한 방법

Arrays.fill(배열이름, ""); 이런 식으로 하면 된다. 쵝오~~

 

그리고 Int to String은 Integer.toString();

 

 

 

 

 

 

 

반응형
myoskin