peacekim
할 수 있는 것과 할 수 없는 것.
peacekim
전체 방문자
오늘
어제
  • 분류 전체보기 (68)
    • 👨‍🏫ps (44)
      • ❄️프로그래머스 (20)
      • 🔟0️⃣백준 (21)
      • leetcode (3)
    • ✍🏻study (20)
      • 👐java (6)
      • 🍃spring (1)
      • 🥇algorithm (0)
      • 🚘oodp (4)
      • 📒 jpa (3)
      • 👣DB (2)
      • 🌂네트워크 (0)
      • 🎸기타 (3)
      • 👊 kotlin (1)
      • 🫥 jvm (0)
    • 📽project (4)
      • 🎀ReBoN (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
peacekim

할 수 있는 것과 할 수 없는 것.

[백준] 1913번 달팽이 풀기 [Java]
👨‍🏫ps/🔟0️⃣백준

[백준] 1913번 달팽이 풀기 [Java]

2022. 3. 8. 23:01
반응형

구현 문제를 오랜만에 풀어서인지, 실버4인데,, 헤매고 시간도 오래걸렸다,,,여전히 많이 부족한 사람이다라고 깨닫게 되는 문제였다. 구현 문제가 코딩테스트에서 자주 나오는데 좀 많이 풀어보고, 코드는 좀 더 깔끔하게 짤 수 있도록 해야겠다. 

달팽이가 움직이는 모양처럼 숫자를 써내려가는 문제였다. (1,1)에서 N*N로 시작해서 1까지 쓸 수 있도록

 

👨‍🏫 풀이

구현 문제여서 딱히 풀이는 없지만, 나는 첫번째 행만 N개를 따로 채워주고, 나머지 행 열은 2개씩 짝을 이루어 N-1, N-2, ...., 1로 가는 규칙이 있어서 해당 규칙을 사용해서 풀었다. 오른쪽, 위쪽, 왼쪽, 아래쪽 순으로 가기 때문에, 움직이는 방향을 설정해서 해당 위치에 움직이는 방향에 맞게 움직일 수 있도록 하였다.

 

👨🏻‍💻 코드

package 번1913;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int N;
    static int[][] res;
    static int[] mR = {0,-1,0,1};
    static int[] mC = {1,0,-1,0};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        int target = Integer.parseInt(st.nextToken());
        res = new int[N+1][N+1];
        int num = N*N;
        int resC = 0; int resR = 0;
        for(int i = 1 ; i <= N ; i++){
            if(num == target) {
                resR = i;
                resC = 1;
            }
            res[i][1] = num--;
        }

        int row = N; int col = 1;
        int cur = N - 1;
        int dir = 0;
        int cnt = 0;
        while(num >= 1){
            cnt++;
            for(int i = cur ; i > 0 ; i--){
                int nRow = row + mR[dir] ; int nCol = col + mC[dir];
                if(num == target){
                    resR = nRow;
                    resC = nCol;
                }

                res[nRow][nCol] = num--;
                row = nRow; col = nCol;
            }
            dir = (dir + 1) % 4;
            if(cnt == 2){
                cnt = 0;
                cur--;
            }
        }
        for(int i = 1 ; i <= N ; i++){
            for(int j = 1 ; j <= N ; j++){
                System.out.print(res[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println(resR + " " + resC);
    }
}
반응형

'👨‍🏫ps > 🔟0️⃣백준' 카테고리의 다른 글

[백준] 20056번 마법사 상어와 파이어볼 풀기 [Java]  (0) 2022.03.11
[백준] 3107번 IPv6 풀어보기 [Java]  (0) 2022.03.10
[백준] 16964번 DFS 스페셜 저지 풀어보기 [Java]  (0) 2022.03.08
[백준] 1261번 알고스팟 풀어보기 [Java]  (0) 2022.03.07
[백준] 16929번 Two Dots 풀어보기 [Java]  (0) 2022.03.06
    '👨‍🏫ps/🔟0️⃣백준' 카테고리의 다른 글
    • [백준] 20056번 마법사 상어와 파이어볼 풀기 [Java]
    • [백준] 3107번 IPv6 풀어보기 [Java]
    • [백준] 16964번 DFS 스페셜 저지 풀어보기 [Java]
    • [백준] 1261번 알고스팟 풀어보기 [Java]
    peacekim
    peacekim
    할 수 있는 것과 할 수 없는 것. github: https://github.com/PyeongGangKim

    티스토리툴바