728x90
반응형
1. 달팽이 배열
- 외곽부터 정사각형을 채우고 대각선 아래로 이동하여 반복
2. 방법별 코드 정리
2-1) 코드
- 외부부터 한바퀴씩 작성
- 시계방향으로 회전하는 달팽이 배열을 이동 좌표를 미리 계산하는 방식으로 작성
# 범위내 좌표이동
def add_direction(x, y, arr_direction, int_direction, int_k):
a, b = 0, 0
# x 좌표 이동
next_x = x + arr_direction[int_direction][0]
if next_x >= 0 and next_x < int_k:
a = next_x
# y 좌표 이동
next_y = y + arr_direction[int_direction][1]
if next_y >= 0 and next_y < int_k:
b = next_y
return a, b
def snailArray_Generator(k):
# k가 0보다 작거나 같으면 종료
if k <= 0:
return []
# 이동할 좌표 구하기
arr_Move = []
# right, down, left, up
arr_direction = [(1, 0), (0, 1), (-1, 0), (0, -1)]
# 최초 시작 좌표
x, y = 0, 0
# 루프 한번에 한 바퀴
for n in range(k-1, 0, -2):
# 각 방향으로
for int_direction in range(4):
# n개 씩 채우기
for _ in range(n):
arr_Move.append((x, y))
# 좌표 이동
x, y = add_direction(x, y, arr_direction, int_direction, k)
# 다음 시작 좌표로 이동
x, y = x+1, y+1
# 마지막 이동한 위치가 array에 이미 있으면 추가 안함
if not (x, y) in arr_Move:
arr_Move.append((x, y))
# 값 넣기
arr_map = [[0 for _ in range(k)] for _ in range(k)]
value = 0
for move in arr_Move:
value += 1
arr_map[move[1]][move[0]] = value
return arr_map
# map 출력
for map in snailArray_Generator(0):
print(map)
2-1) 결과
728x90
반응형
'코딩테스트 > 알고리즘' 카테고리의 다른 글
[자료구조] 우선순위 큐 - 작성 중 (0) | 2022.04.11 |
---|---|
[알고리즘] 하노이의 탑 (0) | 2022.03.09 |
[알고리즘] DFS/ BFS (0) | 2022.02.05 |
[알고리즘] 함수 (0) | 2021.10.11 |
[알고리즘] 0 ~ N 사이의 소수 개수 구하기 (2) | 2020.05.19 |
[알고리즘] RSA 암복호화 알고리즘 C로 구현하기? (2) | 2020.05.17 |
댓글