[SWEA] 1954번 - 달팽이 숫자

김멉덥·2023년 7월 1일
0

알고리즘 공부

목록 보기
16/171
post-thumbnail

문제

D2 - 1954. 달팽이 숫자


코드 구현

정답 코드

T = int(input())

# row, col 인덱스로 탐색할 수 있게 방향 설정 (오른쪽 -> 아래 -> 왼쪽 -> 위)
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]

for t in range(1, T+1):
    N = int(input())    # 만들어질 배열의 크기

    snail = [[0] * N for _ in range(N)]     # 달팽이 배열의 크기 설정 (N * N)

    r, c = 0, 0     # 달팽이 배열에 값을 채워넣기 위한 인덱스를 담을 변수 (현재 위치)
    dist = 0        # dr, dc의 인덱스를 담을 변수 (0 : 오른쪽 / 1 : 아래 / 2 : 왼쪽 / 3 : 위)
    num = 1         # 현재 숫자

    while(num <= N*N):
        snail[r][c] = num
        num += 1

        r += dr[dist]
        c += dc[dist]

        if(r >= N or c >= N or r < 0 or c < 0 or snail[r][c] != 0):     # 범위를 벗어나거나 0이 아닌 다른 값이 이미 있으면 방향 전환
            # 인덱스 재설정을 위해 실행 취소
            r -= dr[dist]
            c -= dc[dist]

            # 방향 전환
            dist = (dist + 1) % 4

            # 다시 수행
            r += dr[dist]
            c += dc[dist]

    print("#{}".format(t))
    for i in range(N):
        print(' '.join(map(str, snail[i])))

풀이

  • 인덱스를 활용하여 2차원 배열 탐색을 해야한다.
  • 오른쪽 → 아래 → 왼쪽 → 위 순서대로 방향전환을 반복한다.
  • row, column을 세야하기 때문에 r, c 선언 → 더 이상 그 방향으로 진행할 수 없으면 방향 전환

What I learned

  • 방향 전환을 구현하는데에 있어서 많이 헤맸기 때문에 푸는데 시간이 예상외로 너무 많이 소요되었다. 나중에 꼭 한번 다시 풀어봐야겠다.

profile
데굴데굴 뚝딱뚝딱 개발기록

0개의 댓글