본문 바로가기

baekjoon

<java> 백준 1022 소용돌이 예쁘게 출력하기

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

 

1022번: 소용돌이 예쁘게 출력하기

첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다.

www.acmicpc.net



import java.io.*;
import java.util.*;
public class Main {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int r1 = Integer.parseInt(st.nextToken());
		int c1 = Integer.parseInt(st.nextToken());
		int r2 = Integer.parseInt(st.nextToken());
		int c2 = Integer.parseInt(st.nextToken());
		
		int size = (c2 - c1 + 1) * (r2 - r1 + 1);
		int[][] arr = new int[r2 - r1 + 1][c2 - c1 + 1];
		
		int x = 0, y = 0;
		if (x >= r1 && x <= r2 && y >= c1 && y <= c2) {
			arr[x - r1][y - c1] = 1;
			size--;
		}
		int state = 0;
		int i = 1;
		int max = 1;
		int count = 0;
		int k = 2;
		int[] disx = {0, -1, 0, 1};
		int[] disy = {1, 0, -1, 0};
		while (size > 0) {
			for (int j = 0; j < i; j++) {
				x += disx[state];
				y += disy[state];
				if (x >= r1 && x <= r2 && y >= c1 && y <= c2) {
					arr[x - r1][y - c1] = k;
					size--;
					max = k;
				}
				k++;
			}
			state++;
			count++;
			if (state == 4) {
				state = 0;
			}
			if (count == 2) {
				count = 0;
				i++;
			}
		}
		
		k = 1;
		for (; max >= 10; k++) {
			max /= 10;
		}
		for (i = 0; i <= r2 - r1; i++) {
			for (int j = 0; j <= c2 - c1; j++) {
				
				System.out.format("%" + k + "d ", arr[i][j]);
			}
			System.out.println();
		}
		
	}
	

}

처음에 배열에 다 넣어서 계산했지만 메모리초과..

그래서 실제 출력하는 배열 부분만 저장하였다

'baekjoon' 카테고리의 다른 글

<java> 백준 1967 트리의 지름  (0) 2022.10.14
<java> 백준 1707 이분 그래프  (1) 2022.10.13
<java> 백준 17845 수강과목  (0) 2022.10.07
<java> 백준 12865 평범한 배낭  (0) 2022.10.07
<java> 백준 1106 호텔  (0) 2022.10.06