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
def solution(n):
arr = [[0 for _ in range(i)] for i in range(1, n+1)]
x, y, num = -1, 0, 1
for i in range(n):
for _ in range(i, n):
if i % 3 == 0:
x += 1
elif i % 3 == 1:
y += 1
else:
x -= 1
y -= 1
arr[x][y] = num
num += 1
answer = []
for l in arr:
answer += l
return answer
풀이
1. arr : 높이가 n인 계단식 리스트 선언
2. x, y = 값을 넣을 좌표, num = 넣을 값
3. 이중 for문 (n, i~n)
- (i % 3) == 0, x좌표 1 증가
- (i % 3) == 1, y좌표 1 증가
- (i % 3) == 2, x, y 좌표 1 감소
- 해당 좌표에 값(num)을 넣고 값(num) 1 증가
4. arr의 모든 요소를 answer에 1차원 리스트로 담기
5. answer 출력
화살표의 총개수는 n번 나오게 됨, 따라서 n번 반복문 사용
각 좌표의 이동의 횟수는 점점 1씩 줄어듬, 따라서 i~n의 반복문 사용 (n, n-1, n-2 ... 1)
좌표의 이동은 총 3가지(아래 그림의 화살표), 따라서 3으로 나눈 나머지를 구해주는 이유
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2 - 전력망을 둘로 나누기 (파이썬) (0) | 2022.05.03 |
---|---|
[프로그래머스] Lv2 - 영어 끝말잇기 (파이썬) (0) | 2022.04.13 |
[프로그래머스] Lv2 - 2개 이하로 다른 비트 (파이썬) (0) | 2022.04.06 |
[프로그래머스] Lv2 - 피로도 (파이썬) (0) | 2022.04.06 |
[프로그래머스] Lv2 - 배달 (파이썬) (0) | 2022.04.05 |