Level 2. 삼각달팽이

Pear_Mh·2021년 7월 22일
0

Programmers-Level 2.

목록 보기
33/40

삼각 달팽이

코딩테스트 연습 > 월간 코드첼린지 시즌1 > 삼각 달팽이

https://programmers.co.kr/learn/courses/30/lessons/68645


문제 설명

# 문제 정리

- 입력: 정수
- 과정:
  1. 위치에 따라 정수를 입력하기 위해 n x n array를 생성한다.
  2. 배치 방향이 n번째 마다 바뀌고,3가지 케이스가 있음을 확인.
  3. 배치 되는 원소의 개수는 ∑n (만약 n = 44+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
profile
Beyond the new era.

0개의 댓글

관련 채용 정보