문제
풀이방법
D2치고는 좀 까다로운 문제였다.
찾아야할 조건은 다음과 같다.
1.방향전환의 조건
-경계를 넘어갈 때 방향 전환
-이미 숫자가 채워져있으면, 방향 전환
2.방향 변환의 규칙
-델타{오른쪽->아래->왼쪽->위}
3.종료 조건
-0인 값이 없으면 종료
-값이 N*N이 되면 종료
1)N*N 이차원 배열 준비
2)(0,0)에서 시작
3)현 위치에 값 셋팅
4) 다음 위치로 진행
-방향 전환 조건에 해당하면 -> 진행 방향 변경
-방향 전환 조건에 해당안됨 -> 진행 방향으로 진행
5)값 증가
6)출력 후 종료
코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int test = input.nextInt();
for(int t=0; t<test; t++) {
int num = input.nextInt();
int index[][] = {{0,1},{1,0},{0,-1},{-1,0}};
int snail[][] = new int[num][num];
int x=index[0][0];
int y=index[0][1];
int nx=0;
int ny=0;
int n=1;
int change=0;
while(snail[nx][ny]==0) {
snail[nx][ny]=n;
n++;
nx=nx+x;
ny=ny+y;
if(nx>=num || nx<0 || ny>=num || ny<0 || snail[nx][ny]!=0) {
change=(change+1)%4;
nx=nx-x;
ny=ny-y;
x = index[change][0];
y = index[change][1];
nx=nx+x;
ny=ny+y;
}
}
System.out.printf("#%d",t+1);
System.out.println();
for(int i=0; i<num; i++) {
for(int j=0; j<num; j++) {
System.out.print(snail[i][j]+ " ");
}
System.out.println();
}
}
}
}
'알고리즘 > SW Expert Academy 문제풀이' 카테고리의 다른 글
[SW Expert Academy] 3234 준환이의 양팔저울 (1) | 2022.09.21 |
---|---|
[SW Expert Academy Java]3289 서로소 집합 (1) | 2022.09.21 |
[SW Expert Academy Java] 4112 이상한 피라미드 탐험 (0) | 2022.09.12 |
[SW Expert Academy Java] 1247 S/W 문제해결 응용 3일차 - 최적 경로 (0) | 2022.09.12 |
댓글