Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @Builder
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
Archives
- Today
- Total
기록
프로그래머스_삼각 달팽이 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/68645#
풀이
1. 삼각형 형태의 arr 배열을 생성한다.
2. int((n-1)/3)+1번 회전한다.
[1]
[2, 21]
[3, 22, 20]
[4, 23, 33, 19]
[5, 24, 34, 32, 18]
[6, 25, 35, 36, 31, 17]
[7, 26, 27, 28, 29, 30, 16]
[8, 9, 10, 11, 12, 13, 14, 15]
삼각형을 직접 그려보면,
n이 8인 경우 3번 회전한다.
n이 7인 경우 3번 회전한다.
n이 6인 경우 2번 회전한다.
n이 5인 경우 2번 회전한다.
n이 4인 경우 2번 회전한다.
n이 3인 경우 1번 회전한다.
n이 2인 경우 1번 회전한다.
n이 1인 경우 1번 회전한다.
2-1. ↓방향으로 step만큼 이동하면서 arr을 채운다.
2-2. → 방향으로 step만큼 이동하면서 arr을 채운다.
2-3. ↖ 방향으로 step만큼 이동하면서 arr을 채운다.
2-4. step을 3만큼 줄인다.
n=7일 때 arr은 다음과 같이 변경된다.
i = 0, step = 6 | i = 1 step = 3 | i = 2, step = 1 | |
↓방향 | [1] [2, 1] [3, 1, 1] [4, 1, 1, 1] [5, 1, 1, 1, 1] [6, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] |
[1] [2, 18] [3, 19, 17] [4, 20, 1, 16] [5, 21, 1, 1, 15] [6, 1, 1, 1, 1, 14] [7, 8, 9, 10, 11, 12, 13] |
[1] [2, 18] [3, 19, 17] [4, 20, 27, 16] [5, 21, 28, 26, 15] [6, 22, 23, 24, 25, 14] [7, 8, 9, 10, 11, 12, 13] |
→ 방향 | [1] [2, 1] [3, 1, 1] [4, 1, 1, 1] [5, 1, 1, 1, 1] [6, 1, 1, 1, 1, 1] [7, 8, 9, 10, 11, 12, 1] |
[1] [2, 18] [3, 19, 17] [4, 20, 1, 16] [5, 21, 1, 1, 15] [6, 22, 23, 24, 1, 14] [7, 8, 9, 10, 11, 12, 13] |
[1] [2, 18] [3, 19, 17] [4, 20, 27, 16] [5, 21, 28, 26, 15] [6, 22, 23, 24, 25, 14] [7, 8, 9, 10, 11, 12, 13] |
↖ 방향 | [1] [2, 18] [3, 1, 17] [4, 1, 1, 16] [5, 1, 1, 1, 15] [6, 1, 1, 1, 1, 14] [7, 8, 9, 10, 11, 12, 13] |
[1] [2, 18] [3, 19, 17] [4, 20, 27, 16] [5, 21, 1, 26, 15] [6, 22, 23, 24, 25, 14] [7, 8, 9, 10, 11, 12, 13] |
[1] [2, 18] [3, 19, 17] [4, 20, 27, 16] [5, 21, 28, 26, 15] [6, 22, 23, 24, 25, 14] [7, 8, 9, 10, 11, 12, 13] |
3. arr에 포함된 item을 순서대로 result에 넣어 반환한다.
코드
def solution(n):
arr = [[1 for j in range(i+1)] for i in range(n)]
r, c = 0, 0
num = 1
step = n-1
for _ in range(int((n-1)/3)+1) :
for dx, dy in [(1, 0), (0, 1), (-1, -1)] :
for i in range(step) :
if not (0<=r<len(arr)) : break
if not (0<=c<len(arr[r])) : break
if arr[r][c]>1 : break
arr[r][c] = num
r, c = r+dx, c+dy
num += 1
r, c = r+2, c+1
step = max(step-3, 1)
result = list()
for item in arr : result.extend(item)
return result
'코딩테스트 > python' 카테고리의 다른 글
프로그래머스_스티커 모으기(2) (0) | 2021.06.16 |
---|---|
프로그래머스_110 옮기기 (0) | 2021.05.31 |
프로그래머스_메뉴 리뉴얼 (0) | 2021.05.27 |
프로그래머스_2개 이하로 다른 비트 (0) | 2021.05.19 |
프로그래머스_괄호 회전하기 (0) | 2021.05.18 |
Comments