SWEA 1954. 달팽이숫자 python(파이썬)

Kang HwanSeok·2022년 8월 10일
0

SWEA

목록 보기
2/8
post-thumbnail

문제 간략 설명

N x N 보드 위에서 빙글빙글 돌면서 숫자를 입력해나아가자.

문제 포인트

2차 배열 리스트 위에서 자유롭게 사고할 수 있는가?

알아갈 개념 요약

2차 배열 리스트에 대한 이해가 필요하다.

  • 요점은 다중 리스트의 좌표 개념을 얼마나 잘 써먹을 수 있는가의 문제
    • 우리가 보통 x,y 좌표계를 사용할 때, ( x, y )의 순서로 제공되곤 한다.
    • 하지만, 2차 배열 리스트에서 list_a[x][y]라면?
      x가 세로를 의미하며 y가 가로를 의미하게 된다.
    • []가 몇번째 리스트인지를 찾는 것이며,
      두번째 []가 해당 리스트의 몇번째 요소인지를 찾는 것이기 때문.

풀이




  • 코드: 직접 뱅글뱅글 돌면서 풀어보자.
    T = int(input())
    for case_num in range(1,T+1):
    N = int(input())
    board = [[0]*N for _ in range(N)]           # 숫자가 적힐 보드 제작 
    stock = 0                                   # 사이클 마다 축적된 sum
    for i in range(N//2):                       # 짝수는 딱 떨어지고 홀수는 1번 부족하게
        turn = ((N-1)-2*i)                      # turn = 사이클 변수
        for j in range(turn):                   # 매번 적기 힘들어서 넣음
            board[i][i+j] = stock + j+1                         # 시작점(1) [그림 설명]
            board[i+j][(N-1)-i] = stock + (turn)+(j+1)          # 시작점(2) [그림 설명]
            board[(N-1)-i][(N-1)-(i+j)] = stock + 2*(turn)+(j+1)# 시작점(3) [그림 설명]
            board[(N-1)-(i+j)][i] = stock + 3*(turn)+(j+1)      # 시작점(4) [그림 설명]
        stock += 4*(turn)                       # 사이클의 마지막 값을 다음 시작점에 더함
    if N % 2 == 1:                              # 홀수 N의 가운데 빵꾸에
        board[N//2][N//2] = N**2                # NxN 보드에 들어갈 마지막 값, N**2 기입
    print(f'#{case_num}')
    for lines in range(len(board)):             # 각 라인을 출력
        print(*board[lines])                    # 리스트 양 옆 [ ]를 언팩하기 위해 * 사용
        ```
        
profile
알고리즘을 좋아하는 개발자

0개의 댓글