개발계발
프로그래머스 - 삼각달팽이(68645) 본문
문제 설명
제한사항
- n은 1 이상 1,000 이하이다.
접근 방식
1. 길이가 1인 것부터 n인 것까지 2차원배열을 생성
2. 숫자를 채운다(숫자의 최댓값은 n * (n+1) // 2)
2-1. 방향을 나눈다. 내려갈때(1,0), 오른쪽(0,1), 올라갈 때(-1,-1)
3. graph를 1차원 배열로 바꿔서 return
def snail_graph(graph):
n = len(graph)
max_value = n * (n + 1) // 2
number = 1
x, y = 0, 0
direction = "down"
moves = {"down": (1, 0), "right": (0, 1), "up": (-1, -1)}
graph[x][y] = number
while number < max_value:
nx, ny = x + moves[direction][0], y + moves[direction][1]
if 0 <= nx < n and 0 <= ny <= nx and graph[nx][ny] == 0:
x, y = nx, ny
number += 1
graph[x][y] = number
else:
if direction == "down":
direction = "right"
elif direction == "right":
direction = "up"
else:
direction = "down"
def solution(n):
answer = []
graph = []
for i in range(1, n+1):
tmp = [0 for _ in range(i)]
graph.append(tmp)
snail_graph(graph)
for i in range(n):
for j in range(len(graph[i])):
answer.append(graph[i][j])
return answer
'알고리즘' 카테고리의 다른 글
프로그래머스 - 행렬의 곱셈(12949) (1) | 2024.05.03 |
---|---|
프로그래머스 - 거리두기 확인하기(81302) (1) | 2024.05.02 |
프로그래머스 - 행렬 테두리 회전하기(77485) (1) | 2024.04.30 |
프로그래머스 - 교점에 별 만들기(87377) (1) | 2024.04.26 |
프로그래머스 - 옹알이(1) (120956) (2) | 2024.04.23 |