일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- Dijkstra
- java #자바 #나동빈
- DFS
- 프로그래머스
- java #자바
- 자바 #java
- css #웹 #생활코딩
- react #리액트 #동빈나 #나동빈 #유튜브강의
- css #생활코딩 #웹
- react #리액트 #동빈나
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- dp
- java #자바 #생활코딩
- 코딩테스트
- 백트랙킹
- 백준 #파이썬 #알고리즘 #코딩테스트
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 파이썬
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 다이나믹프로그래밍
- java #자바 #동빈나
- 투포인터
- 백준 #알고리즘 #파이썬 #코딩테스트
- 파이썬 #백준 #알고리즘 #코딩테스트
- PYTHON
- BFS
- 알고리즘
- 다익스트라
- 재귀
Archives
- Today
- Total
커리까지
[프로그래머스] 삼각 달팽이 파이썬 본문
728x90
SMALL
문제 설명
정수 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
- 문제 예시와 같습니다.
제출 답안
from itertools import chain
# 1 ~ n +1까지의 총 합
def n_sum(n):
result = 1
for i in range(1, n+1):
result += i
return result
def solution(n):
answer = [[0] * i for i in range(1, n + 1)] # 값을 담을 리스트
num , row, col= 1, 0, 0 # 각 칸에 들어갈 값, 행, 열
last_number = n_sum(n) # 마지막 숫자
reverse = False # 거꾸로 올라갈지 확인하기
while num < last_number:
# 만약 row에 해당하는 리스트 안에 0이 없다면 그 행은 모두 처리된 것이니 넘어가기
# reverse를 False하는 이유는 위에서 리버스에서 다시 순서대로 내려가기 위함을 표시
if 0 not in answer[row]:
reverse = False
continue
# 0이 있다면 해당 row, col에 num을 대입
answer[row][col] = num
# num 1 증가
num += 1
# 다시 해당 row가 모두 완료됐는지 확인하고 reverse를 False로
if 0 not in answer[row]:
reverse = False
# 지금 있는 row가 마지막 row면 순서대로 오른쪽으로 값을 증가시켜서 대입하여야 하기에
if row == (n-1) and not reverse:
# row의 모든 값이 계산 전이라면
# 열만 옮기기
if 0 in answer[row]:
col += 1
continue
# 모두 완료됐으면 반대로 올라가야 하니 reverse True
else:
reverse = True
n -= 1
# reverse는 거꾸로 위로 올라가야 하니 행과 열 각각 -1
if reverse:
row -= 1
col -= 1
# reverse가 아니면 행만 증기시키기
else:
row +=1
# 이중 리스트여서 chain으로 단일 리스트로 만들고 return
return list(chain(*answer))
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[백준] 음식물 피하기 파이썬 (0) | 2022.12.06 |
---|---|
[백준] 효율적인 해킹 파이썬 (0) | 2022.12.05 |
[프로그래머스] N-Queen 파이썬 (0) | 2022.12.03 |
[프로그래머스] 연속 부분 수열 합의 개수 파이썬 (0) | 2022.12.02 |
[프로그래머스] 할인 행사 파이썬 (0) | 2022.11.29 |
Comments