백준 1913번 : 달팽이 | 자바 풀이

박지윤·2022년 7월 16일
0

Algorithm_Implementation

목록 보기
3/16

[ Solution ]

package implement1913;

import java.util.*;
import java.io.*;

public 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 find = Integer.parseInt(br.readLine());

        solve(n, find);
    }

    static void solve(int n, int find) {
        int [][] map = new int[n][n];
        int value = 1;
        int x = n/2;
        int y = n/2;

        int limit = 1;
        while(true) {
            for(int i = 0; i < limit; i++) {
                map[y--][x] = value++;
            }
            if(value-1 == n*n) break;
            for(int i = 0; i < limit; i++) {
                map[y][x++] = value++;
            }

            limit++;

            for(int i = 0; i < limit; i++) {
                map[y++][x] = value++;
            }
            for(int i = 0; i < limit; i++) {
                map[y][x--] = value++;
            }

            limit++;
        }

        StringBuilder sb = new StringBuilder();
        int findx = 0;
        int findy = 0;

        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n ; j++) {
                if(find == map[i][j]) {
                    findy = i + 1;
                    findx = j + 1;
                }
                sb.append(map[i][j] + " ");
            }
            sb.append("\n");
        }
        sb.append(findy + " " + findx);
        System.out.println(sb.toString());

    }

}

이 문제는 구현을 어떻게 잘 하느냐가 중요한 문제 같아 보인다.
나는 안에서 밖으로 도는 방식을 선택해서 구현했는데 ,, 그림을 그려보면 패턴을 쉽게 파악할 수 있다.

안에서 밖으로 돌면서 이동하는 칸의 개수에서 패턴이 보이는데, 이를 반복문으로 구현해주면 된다.

0개의 댓글