본문 바로가기
Algorithm/Baekjoon

Baekjoon 1913 달팽이 JAVA

by Hunveloper 2022. 2. 5.
728x90
 

1913번: 달팽이

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서

www.acmicpc.net

문제

홀수인 자연수 N이 주어지면, 다음과 같이 1부터 N2까지의 자연수를 달팽이 모양으로 N×N의 표에 채울 수 있다.

9 2 3
8 1 4
7 6 5
25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17

N이 주어졌을 때, 이러한 표를 출력하는 프로그램을 작성하시오. 또한 N2 이하의 자연수가 하나 주어졌을 때, 그 좌표도 함께 출력하시오. 예를 들어 N=5인 경우 6의 좌표는 (4,3)이다.

입력

첫째 줄에 홀수인 자연수 N(3 ≤ N ≤ 999)이 주어진다. 둘째 줄에는 위치를 찾고자 하는 N2 이하의 자연수가 하나 주어진다.

출력

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다.

N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.

코드
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) throws Exception{
		int [][] arr = new int[1000][1000];
		Scanner sc = new Scanner(System.in);
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n =sc.nextInt(), m=sc.nextInt(),x = 0,y=0;
		int cnt=n*n, i=0, j=0, direct=0, correction=0,temp=0, hold=n ;
		while(cnt>0) {
			arr[i+correction][j+correction]=cnt--;
			temp++;
			switch(direct) {
			case 0: i++; if(temp==hold-1) { direct=1; temp=0;} break;
			case 1: j++; if(temp==hold-1) { direct=2; temp=0;} break;
			case 2: i--; if(temp==hold-1) { direct=3; temp=0;} break;
			case 3: j--; if(temp==hold-1) { direct=0; temp=0; hold-=2; correction++;} break;
			}
			
		}
		for(i=0;i<n;i++) {
			for(j=0;j<n;j++) {
				bw.write(arr[i][j]+" ");
				if(arr[i][j]==m){
					x=i+1;
					y=j+1;
				}
			}
			bw.write("\n");
		}
		bw.write(x+" "+y);
		bw.close();
	}
}
728x90
728x90

'Algorithm > Baekjoon' 카테고리의 다른 글

Baekjoon 15964 이상한 기호 JAVA  (0) 2022.02.05
Baekjoon 1914 하노이 탑 JAVA  (0) 2022.02.05
Baekjoon 10974 모든 순열 JAVA  (0) 2022.02.04
Baekjoon 11653 소인수분해 JAVA  (0) 2022.02.04
Baekjoon 1629 곱셈 JAVA  (0) 2022.02.04

댓글