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
- 백준
- gRPC
- 카카오
- 코드 계약
- 깊게 생각해보기
- spring event
- 누적합
- 검색어 추천
- jwt 표준
- AWS
- 객체지향패러다임
- 숫자 블록
- branch 전략
- 디버깅
- 레디스 동시성
- 완전탐색
- 셀러리
- docker
- BFS
- 프로그래머스
- prg 패턴
- 쿠키
- 이분탐색
- 트랜잭샨
- 결제서비스
- 알람 시스템
- 좋은 코드 나쁜 코드
- 구현
- 수신자 대상 다르게
- piplining
Archives
- Today
- Total
코딩관계론
[프로그래머스] 등대 본문
반응형
문제 이해하기
인천 앞바다에는 등대와 등대 사이를 오가는 뱃길이 총 n-1개 있는 등대가 n개 있습니다. 윤성이는 전력을 아끼기 위해 일부 등대만 켜둘 계획입니다. 그러나 모든 뱃길이 안전하게 운항하기 위해서는 각 뱃길의 양쪽 끝에 적어도 하나의 등대가 켜져 있어야 합니다.
문제 해결 아디어
1. leaf 노드를 불을 꺼야 함으로 먼저 leaf노드를 찾습니다. 다음과 같이 더이상 dfs로 진입할 곳이 없다면 해당 노드는 leaf노드가 됩니다.
def dfs(graph, node, visited, lighthouses):
for next_node in graph[node]:
if not visited[next_node]:
dfs(graph, next_node, visited, lighthouses)
2. 그 후 현재 노드를 기준으로 자식 노드들 중 하나라도 꺼져있으면 해당 노드의 등대를 켜야합니다.
for next_node in graph[node]:
if not visited[next_node]:
lighthouse_status.append(dfs(graph, next_node, visited, lighthouses))
if 1 <= lighthouse_status.count(False):
lighthouses[node] = True
return True
코드
import sys
sys.setrecursionlimit(100001)
from collections import deque
def dfs(graph, node, visited, lighthouses):
lighthouse_status = []
visited[node] = True
need_turn_on = False
for next_node in graph[node]:
if not visited[next_node]:
lighthouse_status.append(dfs(graph, next_node, visited, lighthouses))
if 1 <= lighthouse_status.count(False):
lighthouses[node] = True
return True
return need_turn_on
def solution(n, lighthouse):
answer = 0
graph = [[] * n for _ in range(n + 1)]
lighthouses = [False] * (n + 1)
visited = [False] * (n + 1)
for start, end in lighthouse:
graph[start].append(end)
graph[end].append(start)
dfs(graph, lighthouse[0][0],visited, lighthouses)
count_true = lighthouses.count(True)
return count_true
if __name__ == "__main__":
n = 8
lighthouse = [[1, 2], [1, 3], [1, 4], [1, 5], [5, 6], [5, 7], [5, 8]]
print(solution(n, lighthouse))
배운점 정리하기
그래프가 결국 트리로 변환할 수 있고, 트리에서는 하위 집합의 정보를 탐색하기 편해진다
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 징검다리 (0) | 2024.04.13 |
---|---|
[프로그래머스] H-index (0) | 2024.04.11 |
[카카오 프로그래머스] 주사위 고르기 (0) | 2024.04.07 |
[카카오 프로그래머스] 도넛과 막대 (0) | 2024.04.04 |
[프로그래머스] 석유 시추 (0) | 2024.04.03 |