본문 바로가기

백준

백준 1913 달팽이 (JAVA)

문제

 

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