반응형
1. 문제: https://www.acmicpc.net/problem/14495
✅ 첫번째 풀이
n = int(input())
arr = [1] * (n+3)
if 1<=n and n<=3:
print(1)
else:
for i in range(4, n+1):
arr[i] = arr[i-1] + arr[i-3]
print(arr[n])
- 초반에 n-1, n-3 인덱스의 예외사항에 걸리고 싶지 않아 n+3 크기의 초기값 1인 배열을 초기화했다.
- 그리고 문제에 f(1) = f(2) = f(3) = 1이므로 이 경우에 1을 print하고, 아닌 경우에 해당 수열 공식을 따르는 것으로 처리했다.
하지만 다른 사람의 코드를 보면서 알게된 사실은 !
python의 range가 범위를 벗어나면 for문이 실행되지 않는다는 점이었다.
즉, 위와 같이 1로 초기화했으면 if else문 분기처리하지 않아도 된다.
✅ 두번째 풀이
n = int(input())
arr = [1] * (n+3)
for i in range(4, n+1):
arr[i] = arr[i-1] + arr[i-3]
print(arr[n])
2. 문제: https://www.acmicpc.net/problem/1991
💡 키워드: 트리
오늘은 트리 순회에 대해 복습했다. 여기서 말하는 "전, 중, 후"가 부모 노드라 생각하고 각각 우선순위 높은 순서대로 노드를 타고 내려가면 된다.
✅ 풀이
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**8) # 재귀함수 사용 시 메모리 리미트 방지
n = int(input())
tree = {}
for i in range(n):
root, left, right = map(str, input().split()) # 루트, 왼쪽자식, 오른쪽 자식
tree[root] = (left, right) # 부모노드: (왼쪽 자식노드, 오른쪽 자식노드)
def preorder(v): # 전위순회
if v != ".":
print(v, end="")
preorder(tree[v][0]) # 재귀적으로 탐색
preorder(tree[v][1])
def inorder(v): # 중위순회
if v != ".":
inorder(tree[v][0])
print(v, end="")
inorder(tree[v][1])
def postorder(v): # 후위순회
if v != ".":
postorder(tree[v][0])
postorder(tree[v][1])
print(v, end="")
preorder('A')
print("")
inorder('A')
print("")
postorder('A')
오늘의 배운점
- python에서 1<= n and n<=3 이렇게 쓰지 않아도 1<=n<=3 이런 표현이 가능하다는 점을 알 수 있었다.
- for 문 안의 range가 범위가 성립되지 않는다면, for문이 실행되지 않는다.
- 아래와 같이 input 받는 코드를 더 빠르게 할 수 있다.
import sys
input = sys.stdin.readline
n = int(input())
- 트리의 개념, 용어 및 순회 방식에 대해 복습했다.
- Python에서 재귀함수를 쓸 때는 메모리 초과 방지를 위해 sys.setrecursionlimit(10**8) 을 습관적으로 해주자
반응형
'⚙️ 알고리즘 > 문제풀이' 카테고리의 다른 글
99클럽 코테스터디 4일차 TIL - 백준 1260, 백준 2468 (0) | 2025.04.04 |
---|---|
99클럽 코테스터디 3일차 TIL - 프로그래머스 바탕화면 정리 (0) | 2025.04.02 |
99클럽 코테 스터디 1일차 TIL - 백준 1929 (0) | 2025.04.01 |
[Python] 프로그래머스 - 방문 길이 (Lv. 2) (0) | 2023.12.17 |
[백준/Python] 숨바꼭질 1, 3 정리 (feat. 0-1 BFS, 다익스트라) (0) | 2023.08.11 |