삼각 달팽이
코딩테스트 연습 > 월간 코드첼린지 시즌1 > 삼각 달팽이
https://programmers.co.kr/learn/courses/30/lessons/68645
# 문제 정리
- 입력: 정수
- 과정:
1. 위치에 따라 정수를 입력하기 위해 n x n array를 생성한다.
2. 배치 방향이 n번째 마다 바뀌고, 총 3가지 케이스가 있음을 확인.
3. 배치 되는 원소의 개수는 ∑n (만약 n = 4면 4+3+2+1 = 10)이므로 이중 for문을 구성할 때, 행의 범위를 열에 맞추어 조정해야 한다.
4. 최종적으로 구해진 array를 1D array로 변환하여 출력한다.
# Input value
n = 4
answer = []
# We know number of element is n+(n-1)+(n-2)...+n. So, if n = 4, there are 10 elements
array = [[0]*n for _ in range(n)]
x,y = -1,0 # Set start point (-1 for array[0][0])
num = 1 # start number
for i in range(n):
for j in range(i,n):
if i % 3 == 0: # cols value % 3 == 0,
x += 1 # x shift +1 and repeat range(i,n)
elif i%3 == 1: # cols value % 3 == 1,
y += 1 # y shift +1 and repeat range(i,n)
elif i%3 == 2: # cols value % 3 == 2,
x -= 1 # x,y shift -1 and repeat range(i,n)
y -= 1
array[x][y] = num
num+=1
위와 같이 프로그래밍을 통해 n = 4 일 경우, array의 형태는 다음과 같이 됩니다.
2D array를 1D로 변환하여 출력해야하고, 0을 제거해야 하기에 아래와 같은 코드를 추가합니다.
for i in array: # Transform 1D array
for j in i:
if j != 0: # if j != 0
answer.append(j)
def solution(n):
array = [[0] * n for _ in range(n)]
answer = []
x, y = -1, 0
num = 1
for i in range(n):
for j in range(i, n):
if i % 3 == 0:
x += 1
elif i % 3 == 1:
y += 1
else:
x -= 1
y -= 1
array[x][y] = num
num += 1
for i in array:
for j in i:
if j != 0:
answer.append(j)
return answer