코딩테스트 연습 - 삼각 달팽이 [월간 코드 챌린지 시즌1]
풀이
문제의 설명대로 코드를 짜면 되는 문제였던 것 같습니다. 귀여운 달팽이는 반시계 방향으로 삼각형을 그리며 안으로 돕니다. 아래의 경우를 보며 달팽이가 몇 번 어떻게 돌았는 지를 생각해보죠.
1. 왼쪽변 - [1, 2, 3, 4]
2. 밑변 - [5, 6, 7]
3. 오른쪽 변 - [8, 9]
4. 왼쪽변 - [10]
달팽이는 n개의 변을 그리고 하나의 변을 지날 때마다 그리는 숫자가 하나씩 줄어들게 됩니다. 그리고 방향은 [왼쪽-밑-오른쪽] 순서로 돌게 되니 % 3의 결과에 따라 움직임을 달리해주면 됩니다.
Code
def solution(n):
triangle = [[0 for j in range(i,i+i)] for i in range(1,n+1)]
line, idx, num = -1, 0, 0
for direc in range(n):
for step in range(n-direc):
if direc % 3 == 0: # 오른쪽 변
line += 1
elif direc % 3 == 1: # 밑변
idx += 1
elif direc % 3 == 2: # 왼쪽 변
line -= 1
idx -= 1
num += 1
triangle[line][idx] = num
answer = sum(triangle, []) # 하나의 list로 변환
return answer
문제 설명
정수 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] |
'Algorithm' 카테고리의 다른 글
[프로그래머스] 코딩테스트 연습 - 표 편집(Python) (0) | 2021.07.11 |
---|---|
[프로그래머스] 코딩테스트 연습 - 거리두기 확인하기(Python) (0) | 2021.07.10 |
[프로그래머스] 코딩테스트 연습 - [1차] 프렌즈4블록(Python) (0) | 2021.07.07 |
[프로그래머스] 코딩테스트 연습 - 사칙연산(Python) (4) | 2021.07.06 |
[프로그래머스] 코딩테스트 연습 - 짝지어 제거하기(Python) (0) | 2021.07.06 |