-
구현 예제1: n * n 리스트에 나선형으로 값 채우기Data Structure & Algorithm 2021. 4. 6. 09:24반응형
N x N size의 2차원 리스트가 있습니다. 시작 인덱스는 (0, 0)이며 그 값은 1입니다. 처음 진행 방향은 오른쪽이며 진행 방향을 따라 나선형으로 돌면서 값을 1씩 증가시키며 각 인덱스를 채운 리스트를 만들어주세요.
입력)
4
출력)
[[1, 2, 3, 4],[12, 13, 14, 5],[11, 16, 17, 6],[10, 9, 8, 7]]
위를 구현한 소스코드는 다음과 같습니다.
import sys n = int(sys.stdin.readline().rstrip()) spiral_list = [[0] * n for _ in range(n)] # limit points of each direction lp_left_side = 0 lp_right_side = n - 1 lp_up_side = 1 # i == 0 부터 순회 하므로 up의 초기 값은 1이 된다. lp_down_side = n - 1 # 0: right, 1:down, 2:left, 3:up di = [0, 1, 0, -1] dj = [1, 0, -1, 0] direction = 0 # initialize to right count = 1 i = 0 j = 0 while count <= n * n: spiral_list[i][j] = count count += 1 direction %= 4 # 진행방향의 끝에 도달하면 방향 전환 if direction == 0 and j == lp_right_side: direction = (direction + 1) % 4 lp_right_side -= 1 elif direction == 1 and i == lp_down_side: direction = (direction + 1) % 4 lp_down_side -= 1 elif direction == 2 and j == lp_left_side: direction = (direction + 1) % 4 lp_left_side += 1 elif direction == 3 and i == lp_up_side: direction = (direction + 1) % 4 lp_up_side += 1 # 다음 방문할 리스트 인덱스 설정 i += di[direction] j += dj[direction] for e in spiral_list: print(e)
'Data Structure & Algorithm' 카테고리의 다른 글
플로이드워셜(Floyd–Warshall) 알고리즘 (0) 2021.05.12 다익스트라(Dijkstra) 알고리즘 (0) 2021.05.06 동적 계획법 예제2: Longest Common Subsequence 문제 (0) 2021.04.01 동적계획법 예제1: 정수 리스트(배열)의 최대 부분합 구하기 (0) 2021.04.01 동적 계획법 (Dynamic Programming) (0) 2021.02.15