📖 문제
🧑🏻💻 풀이 과정
1) 문제 이해 및 접근
2차원 배열에서 대각선으로 반을 채운다고 생각하였습니다.
그리하여 가장 왼쪽위의 좌표에서 시작하여 아래, 오른쪽, 왼쪽위 의 세가지 방향으로만 나아갔습니다.
2) 알고리즘
- 구현
3) 풀이 코드
사용 언어 - Python
import sys
from collections import deque
sys.setrecursionlimit(10000)
dr = [1, 0, -1] # 아래, 오른쪽, 왼쪽위
dc = [0, 1, -1]
def solution(n):
answer = [] # 정답 리스트
pyramid = [[0] * n for _ in range(n)] # 2차원 배열
direction = 0 # 진행 방향, 초기 아래 방향
def make_pyramid(y, x, direction, num): # 피라미드 생성
if 0 <= y < n and 0 <= x < n and not pyramid[y][x]: # 범위 안의 값이고, 숫자를 채우지 않았다면
pyramid[y][x] = num # 숫자 입력
r = y + dr[direction] # 다음 좌표
c = x + dc[direction]
if not (0 <= r < n and 0 <= c < n) or (pyramid[r][c]): # 다음 좌표가 범위를 벗어나거나 숫자가 이미 있다면
direction = (direction+1) % 3 # 진행 방향을 변경
r = y + dr[direction] # 새로운 다음 좌표
c = x + dc[direction]
make_pyramid(r, c, direction, num+1) # 재귀 탐색
def make_answer(): # 정답 리스트 생성
for i in range(n): # 2차원 배열 반복하며
for j in range(n):
if pyramid[i][j]: # 숫자가 있는 경우에만, 리스트에 추가
answer.append(pyramid[i][j])
else: # 숫자가 없는 경우, 다음 행 탐색
break
make_pyramid(0, 0, direction, 1)
make_answer()
return answer
📝 결과 및 학습한 내용
1) 어려웠던 내용
특별히 없습니다.
2) 새롭게 학습한 내용
특별히 없습니다.
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/68645
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
[프로그래머스] 네트워크 (0) | 2022.03.20 |
---|---|
[백준] 11052 카드 구매하기 (0) | 2022.03.19 |
[프로그래머스] 구명보트 (0) | 2022.03.16 |
[프로그래머스] 캐시 (0) | 2022.03.15 |
[프로그래머스] 양궁대회 (0) | 2022.03.14 |
댓글