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
- 너비 우선 탐색
- Lv. 2
- Python
- 프로그래머스
- greedy
- javascript
- 동적계획법
- dfs
- 티스토리챌린지
- 자바스크립트
- SQL
- Lv. 0
- Lv. 1
- SQL 고득점 KIT
- C언어
- level3
- bfs
- Lv. 3
- level 3
- 오블완
- DP
- 소프티어
- group by
- Java
- LEVEL 2
- Dynamic Programming
- 깊이 우선 탐색
- softeer
- 파이썬
- programmers
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 3] 등대 {언어 : Python} [8, 9 런타임 에러 해결] 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/133500?language=python3
정답 코드
import sys
sys.setrecursionlimit(10**6)
def solution(n, lighthouse):
adjL = [[] for _ in range(n+1)]
dp = [0 for _ in range(n+1)]
visited = [0 for _ in range(n+1)]
def dfs(current, parent):
for node in adjL[current]:
if node == parent:
continue
if visited[node]:
continue
visited[node] = 1
dfs(node, current)
if dp[node] == 0:
dp[current] = 1
return
for start, to in lighthouse:
adjL[start].append(to)
adjL[to].append(start)
dfs(1, 0)
answer = sum(dp)
return answer
풀이 방법
- 1번 노드부터 깊이 우선 탐색으로 들어간다.
- 가장 깊은 곳에서 반환되면 자식 노드를 등대가 비추고 있는지 확인한다.
- dp[node] == 0이면 현재 노드에서 등대를 켜야 하므로 dp[curren] = 1
- 마지막으로 dp의 합을 반환하면 끝!
느낀점
- 쉽게 풀었지만 깊이 에러가 생길줄은 몰랐다.
- 8, 9번에서 런타임 에러가 났다면 sys.setrecursionlimit으로 깊이를 늘려주자.
'알고리즘 > 풀었지만 다시 보기' 카테고리의 다른 글
프로그래머스 [Lv. 3] [PCCP 기출문제] 4번 / 수식 복원하기 {언어 : Python} (1) | 2024.09.12 |
---|---|
프로그래머스 [Lv. 3] 카드 짝 맞추기 {언어 : Python} (0) | 2024.09.04 |
프로그래머스 [Lv. 3] 매칭 점수 {언어 : Python} [정규식X] (0) | 2024.08.27 |
프로그래머스 [Lv. 3] 2차원 동전 뒤집기 {언어 : JavaScript} (0) | 2024.08.16 |
프로그래머스 [Lv. 4] 도둑질 {언어 : JavaScript} (0) | 2024.03.24 |