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

Jaewoong2·2021년 2월 4일
0

알고리즘공부

목록 보기
16/35

문제

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

접근법

반 시계 방향으로 숫자가 채워지는 것을 이용 해서,2중 배열을 만들어야 한다.

일단, n 개가 주어지면,

  1. n 만큼 숫자가 아래로 채워진다.

  2. n-1 만큼 숫자가 오른쪽 으로 채워진다.

  3. n-2 만큼 숫자가 왼쪽 위로 채워진다.

  4. 1~3 의 과정을 n이 0이 될 때 까지 반복한다.

3가지 패턴을 이용해서 원하는 위치에 숫자를 넣는 반복문 을 구현 해야한다.

 - `n번 숫자를 넣을 때`, `아래`로 
 - `n-1 숫자를 넣을 때`, `오른쪽` 으로
 - `n-2 숫자를 넣을 때`, `왼쪽 위`로 
 - `n-3 숫자를 넣을 때`, `아래`로 ⋯

먼저 , n번, n-1번, n-2번, ⋯, 0번 숫자를 넣는 반복문은 아래와 같이 만들 수 있다.

for i in range(n):
    for j in range(i, n):
    # i 가 0일 때, n번
    # i 가 1일 때, n - 1번
    # ⋯
    # i 가 n-1일 때, 0번

그럼 i시계가 방향을 바꾸는 횟수 라고 가정 했을 때, i가 3번 바뀌면 1바퀴 이다.

if i % 3 == 0:
  # 아래
elif i % 3 == 1:
  # 오른쪽
elif i % 3 == 2:
  # 왼쪽 위

최종적으로 삼각 달팽이를 만들려면최대 N개의 줄, 최대 N개의 행 을 가져야 하기 때문에, N by N 행렬 을 만든다.

[[0 for _ in range(n)] for _ in range(n + 1)]

그리고, 이제 아래, 오른쪽, 왼쪽 위 으로 이동 시키 위해, row, col 변수를 0 으로 선언해준다.

-아래로 갈 때, row1 증가시켜준다

-오른쪽으로 갈 때, col1증가시켜준다

-왼쪽 위 로 갈 때, row, col 을 각각 1 감소 시켜준다.

그리고, 위치 변수 를 이동 시키고 값을 넣어준 다음, 그 값을 1 증가시켜준다.

그리고 return 값으로 0 을 지우고 이중 배열안에 있는 배열을 하나로 합쳐주면 된다.


코드

  snail = [[0 for _ in range(n)] for _ in range(n+1)]
  
  row, col = 0, 0
  
  value = 1
  
  i = 0
  
  while i < n:
      for j in range(i, n):
          if i % 3 == 0:
              row += 1
          elif i % 3 == 1:
              col += 1
          elif i % 3 == 2:
              row -= 1
              col -= 1
          snail[row][col] = value
          value +=1
      i+= 1

  return [x for y in snail for x in y if x != 0]
profile
DFF (Development For Fun)

0개의 댓글