728x90
문제
홀수인 자연수 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 |
댓글