https://school.programmers.co.kr/learn/courses/30/lessons/132266?language=python3
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SOLUTION 📝
- sources들을 개별적으로 보는 것이 아닌 도착점에서 갈 수 있는 지점/거리 체크
- graph에 미리 특정 지점에서 갈 수 있는 위치들을 확인하여 roads를 반복하여 확인하지 않도록 함
- dictionary.get(x, y) 함수의 사용: 두 개의 인자 사용 가능 => x는 찾고자 하는 값, y는 return 값이 없을 때 반환할 값
- 차후 공부 대상 : 유사 딕셔너리(defaultdict) 사용해보기
CODE 📌
from collections import deque
def solution(n, roads, sources, destination):
# 정답 변수
answer = []
# 변수 정의
check = [0]*(n+1) # 방문 여부 확인
now = deque([destination]) # 현재 갈 수 있는 위치 정보 저장
possible = {destination: 0} # 목적지에 도착까지 걸리는 거리
check[destination] = 1 # 시작점 방문 처리
# i 지점에서 갈 수 있는 위치 정보 저장 ex) 1: [2, 3] => 1에서는 2, 3으로 이동할 수 있음
graph = {i: [] for i in range(1, n+1)}
# graph에 정보 저장
for a, b in roads:
graph[a].append(b)
graph[b].append(a)
# 갈 수 있는 위치가 남아있다면
while now:
# s는 갈 수 있는 지점들 중 한 포인트
s = now.popleft()
# graph에 미리 저장했던 s에서 갈 수 있는 포인트들
for e in graph[s]:
# 이미 갔던 곳은 다시 보지 않는다
if check[e] == 0:
# 방문 체크 및 갈 수 있는 위치 정보로 저장, 그리고 목적지 도착 거리 저장
check[e] = 1
now.append(e)
possible[e] = possible[s]+1
# get 사용
for s in sources:
answer.append(possible.get(s, -1))
return answer
'study > 알고리즘' 카테고리의 다른 글
| [python] programmers - 성격 유형 검사하기 (0) | 2022.08.24 |
|---|---|
| [python] programmers - 압축 (0) | 2022.08.13 |
| [js] programmers - 파일명 정렬 (0) | 2022.08.11 |
| [python] programmers - 줄 서는 방법 (0) | 2022.08.09 |
| [python] 백준 - 정수 삼각형(1932) (0) | 2022.05.02 |