[프로그래머스] 정수를 나선형으로 배치하기 Lv.0 - [파이썬/python]
https://school.programmers.co.kr/learn/courses/30/lessons/181832
def solution(n):
#[[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0]] 빈 리스트 만들기
sprial = [[0] * n for _ in range(n)]
# 무언가에 부딪혔을 때 [우 하 상 좌]순으로 움직이게 하는 방향설정
# [ 오른쪽으로(→) 이동 / 부딪히면 아래로(↓) 이동 / 부딪히면 왼쪽(←)으로 이동 / 부딪히면 위로(↑) 이동 ] 반복
dx = [1,0,-1,0] # 처음 방향은 오른쪽이니 dx는 1, dy는 0 / 부딪히면 아래쪽으로 이동해야 하니 dx 0 dy 1 이런식
dy = [0,1,0,-1]
#처음 좌표
x, y = 0, 0
#방향 (dx, dy의 0,1,2,3 0,1,2,3 대입하면서 방향을 설정하는 용도)
diretion = 0
# n의 제곱만큼 반복 (i는 1부터 n*n까지)
for i in range(1,(n*n)+1):
#빈배열에 i 순서대로 넣어주기
sprial[y][x] = i
#이동할 다음 좌표 구하기
nx = x + dx[diretion]
ny = y + dy[diretion]
#이동할 좌표가 벽에 부딪히거나(인덱스를 벗어나는 행위) 숫자가 들어있을 시 다음 이동할 좌표 새로 구하기
if nx >= n or nx < 0 or ny >= n or ny < 0 or sprial[ny][nx] != 0:
#방향은 총 상하좌우 4가지
diretion = (diretion + 1) % 4
#방향 정한후 다음 이동할 좌표 정하기
nx = x + dx[diretion]
ny = y + dy[diretion]
#x, y에 이동해야할 다음 좌표 넣기
x, y = nx, ny
return sprial
728x90
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 최댓값과 최솟값 - Lv.2 (21) | 2023.08.13 |
---|---|
[프로그래머스] 평행 - Lv.0 (32) | 2023.08.13 |
[프로그래머스] 개인정보 수집 유효기간 - Lv.1 (3) | 2023.08.11 |
[프로그래머스] 옹알이 (2) - Lv.1 (0) | 2023.08.11 |
[프로그래머스] 옹알이 (1) - Lv.0 (2) | 2023.08.10 |