[프로그래머스] 삼각달팽이 & 역삼각달팽이
[프로그래머스] 삼각달팽이 & 역삼각달팽이
문제
링크 : 프로그래머스
풀이
삼각 달팽이와 역삼각 달팽이를 구하는 로직을 짜는 것이다.
문제는 정수 n이 주어졌을 때, 달팽이의 꼴로 수가 증가하면서
가운데까지 수를 채웠을 때 피라미드 형태의 배열이 된다.
이 때 윗층부터 차례대로 출력한 결과를 나타내는 것이다.
ex) n = 4, [1,2,9,3,10,8,4,5,6,7]
풀이에서 가장 중요하게 생각해야할 점은..
방향이었다!
첫번째 나열에서 숫자가 n에 도달한다. -> 방향 변환
두번째 나열에서 숫자가 n-1에 도달한다. -> 방향 변환
세번째 나열에서 숫자가 n-2에 도달한다. -> 방향 변환
이렇게 나아간다. 따라서 이 로직을 이용해서 result 배열을 만들어주고
answer 배열에 처음부터 넣어준다.
역삼각 달팽이도 같은 방식으로 해준다.
# 삼각배열
def solution(n):
answer = []
res = [[0] * n for _ in range(n)]
num = 1
x, y = -1, 0
for i in range(n):
for _ in range(i, n):
#down
if i%3 == 0:
x += 1
#right
elif i%3 == 1:
y += 1
#up
elif i%3 == 2:
x -= 1
y -= 1
res[x][y] = num
num += 1
for i in res:
for j in i:
if j != 0:
answer.append(j)
return answer
# 역삼각 달팽이
def solution(n):
answer = []
res = [[0] * n for _ in range(n)]
num = 1
x, y = 0, -1
for i in range(n):
for _ in range(i, n):
#right
if i%3 == 0:
y += 1
#down
elif i%3 == 1:
x += 1
y -= 1
#up
elif i%3 == 2:
x -= 1
res[x][y] = num
num += 1
for i in res:
for j in i:
if j != 0:
answer.append(j)
return answer
실수했던 점
0으로 이루어진 전체 배열과 방향을 생각하지 못했다.
삼각형이어야 한다는 고정관념 때문에 접근조차 어려웠다.
그리고 규칙이 있다는 점을 파악하지 못했기에 풀지 못했다.