본문 바로가기
ALGORITHM/SW Expert Academy

[SWEA/Python] 1954. 달팽이 숫자

by 안녕나는현서 2021. 8. 9.
728x90

📌 문제

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

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

swexpertacademy.com

 

📌 코드

T = int(input())

for t in range(1, T+1) :
    N = int(input())

    snail = []
    for _ in range(N) :
        snail.append(list(0 for __ in range(N)))

    i = 0
    j = 0
    line = 0
    way = 0

    for n in range(1, N*N + 1) :
        if way%4 == 0 :
            if j < N  :
                snail[i][j] = n
                j += 1
            else :
                i += 1
                j -= 1
                way += 1
                snail[i][j] = n
                i += 1
        elif way%4 == 1 :
            if i < N :
                snail[i][j] = n
                i += 1
            else :
                i -= 1
                j -= 1
                way += 1
                snail[i][j] = n
                j -= 1
        elif way%4 == 2 :
            if j >= line :
                snail[i][j] = n
                j -= 1
            else :
                i -= 1
                j += 1
                way += 1
                snail[i][j] = n
                i -= 1
        elif way%4 == 3 :
            if i > line :
                snail[i][j] = n
                i -= 1
            else :
                i += 1
                j += 1
                way += 1
                snail[i][j] = n
                j += 1
        
                line += 1
                N -= 1

    print(f'#{t}')
    
    for I in range(len(snail[0])) :
        for J in range(len(snail[0])) :
            if J == len(snail[0]) - 1 :
                print(snail[I][J])
            else :
                print(snail[I][J], end=' ')

꼬박 하루를 다 써서 푼 문제,,,😭

이건 분명히 더 간단하게 정리할 수 있을것이다... 근데 이 문제에 너무 질려서 당분간은 보고 싶지 않음..ㅎ...

나중에 다시 한 번 풀어보는 걸로! (아마도.. SWEA D2 다 풀고 나서..? 아니면 그보다 조금 더 뒤에...?ㅎㅎㅎ..)

 

+) 0811

import sys

sys.stdin = open('input.txt')

T = int(input())

for t in range(1, T+1):
    N = int(input())

    result = [[0]*N for _ in range(N)]

    dx = [0, 1, 0, -1]
    dy = [1, 0, -1, 0]

    x = 0
    y = 0
    way = 0

    for n in range(1, N**2+1):
        result[x][y] = n
        x_ = x + dx[way]
        y_ = y + dy[way]

        if x_ not in range(N) or y_ not in range(N) or result[x_][y_] != 0:
            way = (way + 1) % 4

        x += dx[way]
        y += dy[way]

    print(f'#{t}')
    for row in result:
        print(*row)

생각보다 빨리 다시 풀게 되었다...ㅎ...

델타 배열을 통해서 상하좌우로 이동할 수 있게 구현해보았다.

728x90

댓글