코딩테스트/SWEA

[SW EA] 1954. 달팽이 숫자

박소민 2023. 2. 8. 22:14
1954. 달팽이 숫자
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

  • 내 풀이 - Python
T=int(input())
for test_case in range(1,T+1):
    n=int(input())
    snail=[[0 for _ in range(n)] for _ in range(n)]

    #동남서북
    x=[0, 1, 0, -1]
    y=[1, 0, -1, 0]

    i=0 #방향인덱스
    k=1 #수
    dx,dy=0,0;
    snail[dx][dy]=k
    for _ in range(n**2-1):
        nx=dx+x[i%4]
        ny=dy+y[i%4]
      
        if nx<0 or nx>=n or ny<0 or ny>=n or snail[nx][ny]!=0:
            i+=1
            nx=dx+x[i%4]
            ny=dy+y[i%4]

        dx=nx
        dy=ny

        k+=1
        snail[dx][dy]=k
        
        
    print("#%d"%test_case)
    for row in range(n):
        for cal in range(n):
            print(snail[row][cal], end=" ")
        print()

 

  • 내 풀이 - JAVA
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class SW1954_ParkSomin {
    public static void main(String[] args) throws IOException {
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st= new StringTokenizer(br.readLine());
        int T= Integer.parseInt(st.nextToken());
        for (int test_case=1; test_case<=T; test_case++){
            int n= Integer.parseInt(new StringTokenizer(br.readLine()).nextToken());

            int[][] snail= new int[n][n];

            int[] x={0,1,0,-1};
            int[] y={1,0,-1,0};

            int idx=0;
            int k=0;
            snail[0][0]=++k;
            int dx=0;
            int dy=0;

            for (int i=0; i< Math.pow(n,2)-1 ; i++){
                int nx=dx+x[idx%4];
                int ny=dy+y[idx%4];

                if (nx<0 || nx>=n || ny<0 || ny>=n || snail[nx][ny]!=0 ){
                    idx++;
                    nx=dx+x[idx%4];
                    ny=dy+y[idx%4];
                }
                dx=nx;
                dy=ny;

                snail[dx][dy]=++k;
            }
            System.out.printf("#%d", test_case);
            System.out.println();
            for (int i=0;i<n;i++) {
                for(int j=0;j<n;j++){
                    System.out.printf("%d ",snail[i][j]);
                }
                System.out.println();
            }
        }


    }
}