🌞Algorithm/🔥Baekjoon

[Baekjoon] 5976_A spiral walk

뿌야._. 2025. 5. 2. 21:17
문제(출처: https://www.acmicpc.net/problem/5976)

< A spiral walk >

 

문제 풀이 

 

시계방향으로 돌아가면서 숫자를 채운다.

 

my solution (Java)

 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 
 public class _5976_ { // A spiral walk
 
 	public static void main(String[] args) throws IOException {
 		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
 		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
 		int N = Integer.parseInt(bf.readLine());
 
 		int arr[][] = new int[N][N];
 		int num = 1;
 
 		int dx[] = { 0, 1, 0, -1 };
 		int dy[] = { 1, 0, -1, 0 };
 		int x = 0, y = -1, idx = 0;
 
 		while (num <= N * N) {
 			while (x+dx[idx]>=0 && x+dx[idx]<N && y+dy[idx]>=0 && y+dy[idx]<N && arr[x+dx[idx]][y+dy[idx]]==0) {
 				x+=dx[idx];
 				y+=dy[idx];
 				arr[x][y] = num++;
 			}
 			idx += 1;
 			if (idx == 4) {
 				idx = 0;
 			}
 		}
 
 		for (int i = 0; i < N; i++) {
 			for (int j = 0; j < N; j++) {
 				bw.write(arr[i][j] + " ");
 			}
 			bw.write("\n");
 		}
 		bw.flush();
 	}
 }
변수)
N : 입력값
arr : 배열
num : 채워 넣을 값
dx, dy : 우, 하, 좌, 상
x, y, idx : 현재 위치, 방향

 

N을 입력받는다. num이 N*N이하일 때 다음 과정을 반복한다.

 

1) 이동방향이 배열 범위 안이고, 숫자로 채워지지 않았다면 이동 및 값 채우기

2) 방향 전환

 

최종 배열 arr을 출력한다.



 

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

[Baekjoon] 11809_YODA  (1) 2025.05.01
[Baekjoon] 28464_Potato  (1) 2025.04.30
[Baekjoon] 4335_숫자 맞추기  (0) 2025.04.29
[Baekjoon] 11544_D as in Daedalus  (1) 2025.04.28
[Baekjoon] 5840_Breed Proximity  (1) 2025.04.25