SSAFY/SWEA

[SWEA] 1954. 달팽이 숫자_파이썬

728x90
반응형

풀기 전 생각해보기😮

  • 이차원 배열 상에서 인덱스 조건 주의하기
  • 방향을 어떻게 설정해 줄 것인지

풀이🛫

T = int(input())

for t in range(T):
    N = int(input())
    arr = [[0] * N for i in range(N)]

    col, row = 0, 0
    v = 0

    arr[col][row] = 1

    dcol = [-1, 0, 1, 0]
    drow = [0, 1, 0, -1]

    for i in range(1, N**2+1):
        arr[col][row] = i
        col = col+dcol[v]
        row = row+drow[v]

        if col < 0 or row < 0 or N <= col or N <= row or arr[col][row] != 0:
            col = col-dcol[v]
            row = row-drow[v]

            v = (v+1) % 4
            col = col+dcol[v]
            row = row+drow[v]

    print(f"#{t+1}")
    for i in arr:
        for j in i:
            print(j, end=" ")
        print()

 

핵심 정리🎁

for i in range(1, N**2+1):
    arr[col][row] = i
    col = col+dcol[v]
    row = row+drow[v]
	
    #1
    if col < 0 or row < 0 or N <= col or N <= row or arr[col][row] != 0:
        col = col-dcol[v]
        row = row-drow[v]

    	#2
        v = (v+1) % 4
        col = col+dcol[v]
        row = row+drow[v]
  • #1_이전까지 ncol, nrow를 사용하거나 범위를 지정할 때 0<=col<N와 같은 조건을 주로 사용했었는데, 문제에 응용할 때마다 자주 실수를 겪는 것 같다. 위와 같이 코드가 다소 길어지더라도 풀어주는 것도 실력향상에 도움이 될 것 같다.
  • #2_방향을 결정하는 v값을 정확하게 입력해주어야 한다. (v+1) % 4를 쉽게 떠올리지 못해서 어려움을 겪었다

 

링크💎

 

SW Expert Academy

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

swexpertacademy.com

 

후기 😎

  • 이차원 배열, 특히 여러 달팽이 문제가 계단이 되는 것 같다. 답답하지만 이겨내야지 뭐..