문제 설명
정수 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,[])
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level2] 방문 길이 -python (0) | 2021.12.28 |
---|---|
[프로그래머스][level2] 올바른 괄호 -python (0) | 2021.12.28 |
[프로그래머스][level2] 타겟 넘버 -python (0) | 2021.12.28 |
[프로그래머스][level2] 거리두기 확인하기 (0) | 2021.12.28 |
[프로그래머스][level2] 최댓값과 최솟값 - python (0) | 2021.12.28 |