본문 바로가기

~2023

[Python] 삼각 달팽이 - 월간 코드 챌린지 시즌1

728x90
반응형

<문제 링크>

 

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

 


<풀이>

 

프로그래머스 예시

n=5 그림을 보면 [1, 2, 3, 4, 5], [6, 7, 8, 9], [10, 11, 12], [13, 14], [15] 순으로 배열에 값이 들어가는 것을 확인할 수 있습니다.

즉 5번, n번만큼 작동하면 모든 값이 들어갑니다.

회차마다 들어가는 값은 n - 회차입니다. (회차는 배열이기 때문에 0부터 시작)

하나의 둘레는 3회가 필요하기 때문에 회차 % 3을 통해 방향을 구합니다. (우 -> 하 -> 상이라서 3회)

회차 % 3 == 0이면, 아래로 향하고

회차 % 3 == 1이면, 오른쪽으로 향하고

둘 다 아니면 위로 올라갑니다.

이 논리를 통해 2차원 배열를 꽉 채운 후에 sum(arr, [])를 통해 1차원 배열로 변환시킵니다.

 


<코드>

answer = 삼각형 배열

x, y = 좌표값

num = 대입 숫자

i = 방향값

j = i 방향에 대한 대입 횟수


def solution(n):
    answer = [[0 for j in range(1, i+1)] for i in range(1, n+1)] # 삼각형 구조 만들기

    x, y = -1, 0 # 좌표 초기화 => 처음 시작은 아래로 내려가기 때문에 x = -1
    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
            answer[x][y] = num
            num += 1

    return sum(answer, [])

 

 

 

 

728x90
반응형