본문 바로가기

개발/algorithm

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

문제 설명

 

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.


제한사항
  • n은 1 이상 1,000 이하입니다.
입출력 예
n result
4 [1,2,9,3,10,8,4,5,6,7]
5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9]
6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]
입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • 문제 예시와 같습니다.

문제 링크

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

 

코딩테스트 연습 - 삼각 달팽이

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

풀이 

  • n이 4일 때 예를 들어 참고 
  • 아래 그림처럼 아래 끝까지 내려갔다가, 오른쪽 끝까지 갔다가, 대각선 왼쪽 위로 가는 3세트 과정 반복. 
  • 총 횟수는 n번 실행 
  • 따라서 3으로 나눈 나머지가 0이면 x + 1 반복, 나머지가 1이면 y + 1 반복, 나머지가 2이면 x-1, y-1 반복 
  • 첫 x와 y는 x = -1 , y = 0 

def solution(n):
	# 삼각형 모양의 배열 생성 
    data = [ [0 for _ in range(0,i)] for i in range(1,n+1)]
	
    # 처음 x와 y 값 
    x = -1
    y = 0
    # 저장될 숫자 
    num = 1
	
    # 총 n번  
    for i in range(n):
      for j in range(i,n):
      # 3으로 나눈 나머지 0이면 x + 1 
        if i % 3 == 0:
          x += 1 
      # 3으로 나눈 나머지 1이면 y + 1 
        elif i % 3 == 1:
          y += 1 
      # 3으로 나눈 나머지 2이면 x-1, y-1 
        else:
          y -= 1 
          x -= 1
        data[x][y] = num
        num += 1 
	# 2차원 배열들 합쳐서 1차원 배열로 만들기 
    return sum(data,[])