문제
https://www.acmicpc.net/problem/1913
1913번: 달팽이
N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서
www.acmicpc.net
코드
package com.company;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int t = Integer.parseInt(br.readLine());
solve(n, t);
}
private static void solve(int n, int t) {
StringBuilder sb = new StringBuilder();
int[][] map = new int[n][n];
int limit = 1, value = 1;
int x = n / 2;
int y = n / 2;
int ans_x = 0, ans_y = 0;
while (true) {
for (int i = 0; i < limit; i++) {
map[x--][y] = value++;
}
if (value > n * n)
break;
for (int i = 0; i < limit; i++) {
map[x][y++] = value++;
}
limit++;
for (int i = 0; i < limit; i++) {
map[x++][y] = value++;
}
for (int i = 0; i < limit; i++) {
map[x][y--] = value++;
}
limit++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sb.append(map[i][j] + " ");
if (t == map[i][j]) {
ans_x = i + 1;
ans_y = j + 1;
}
}
sb.append("\n");
}
sb.append(ans_x + " " + ans_y);
System.out.println(sb.toString());
}
}
풀이
처음에는 좌표이동용 배열(dir_x ,dir_y)과 반복문으로만 풀려고 하였으나 어려움이 있어 ➡️, ⬇️, ⬅️, ⬆️ 종류별로 구현하였다. 해당 코드의 특이점으로는 이동하는 길이가 1 → 1 → 2 → 2 → 3 → 3 → 4 → 4 → 같은 방식으로 진행한다는 점이다.
'백준' 카테고리의 다른 글
백준 10994 별찍기 - 19 (JAVA) (0) | 2022.07.14 |
---|---|
백준 12933 오리 (JAVA) (0) | 2022.07.14 |
백준 4396 지뢰 찾기 (JAVA) (0) | 2022.07.08 |
백준 2578 빙고 (JAVA) (0) | 2022.07.07 |
백준 20546 🐜기적의 매매법🐜 (JAVA) (0) | 2022.07.05 |