[SWEA D2] 1954. 달팽이 숫자

shin·2022년 11월 10일
0

CodingTest 문제 풀이

목록 보기
32/79

문제 : [SWEA D2] 1954. 달팽이 숫자

풀이

# 방향 설정 (우하좌상)
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]

T = int(input())
for t in range(1, T+1):
    N = int(input())
    maps = [[0] * N for _ in range(N)]
    
    # 초기 위치와 회전의 방향 설정
    r, c = 0, 0
    dist = 0 # 우 : 0, 하 : 1, 좌 : 2, 상 : 3
    
    for n in range(1, N * N + 1):
        maps[r][c] = n
        r += dr[dist]
        c += dc[dist]
        
        # 0보다 작거나 N-1보다 크거나, 이미 값이 들어있는 경우(지나간 경우)
        if r < 0 or c < 0 or r > N - 1 or c > N - 1 or maps[r][c] != 0:
            # 기존 방향으로 진행 취소
            r -= dr[dist]
            c -= dc[dist]
            # 방향 전환
            dist = (dist + 1) % 4 # 0 ~ 3사이의 값
            # 새로운 방향으로 진행
            r += dr[dist]
            c += dc[dist]
            
    print(f"#{t}")
    for row in maps:
        print(*row) # row 단위로 값을 가져옴
profile
Backend development

0개의 댓글