문제(출처: 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 |