본문 바로가기

알고리즘/프로그래머스

[프로그래머스] 삼각달팽이

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🤔 문제분석

달팽이처럼 회전하면서 그래프를 그려야 하는 문제이다. 달팽이의 규칙을 분석하여 그래프를 그리면된다.

  1. 이동하는 순서는 아래 이동 → 오른쪽 이동 → 위로 이동 → 아래 이동 … 방식으로 이동한다.
  2. 이동하는량은 n이 6일때, 6 → 5 → 4 → 3 → 2 → 1 방식으로 이동한다.

위의 규칙을 기반으로 x, y 좌표계에서 생각해보면 아래의 방식으로 이동해야 원하는 그래프에 값을 채울 수 있다.

  • 아래 이동 : (1, 0)
  • 오른쪽 이동 : (0, 1)
  • 위로 이동 : (-1, -1)

chain으로 모든 리스트를 flat 하게 만들어준다.

💻 코드

from itertools import chain

def solution(n):
    move = [(1, 0), (0, 1), (-1, -1)]
    
    def change_pos(pos):
        if pos == 2:
            return 0
        else:
            return pos + 1
        
    temp = [[0] * (i+1) for i in range(n)]
    pos = 0
    y, x = 0, 0
    start = 1
    for i in range(n, 0, -1):
        temp[y][x] = start
        for _ in range(i-1):
            start += 1
            y, x = y + move[pos][0], x + move[pos][1]
            temp[y][x] = start
        
        pos = change_pos(pos)
        y, x = y + move[pos][0], x + move[pos][1]
        start += 1
                
    return list(chain(*temp))
728x90