728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15B1cKAKwCFAYD
< 📝 문제 >
비상연락망과 연락을 시작하는 당번에 대한 정보가 주어질 때, 가장 나중에 연락을 받게 되는 사람 중 번호가 가장 큰 사람을 구하는 함수를 작성하시오.
< ❓ 생각 >
< 💻 코드 >
# 테스트 케이스 10개
for tc in range(1,11):
# 입력 받는 데이터 길이, 시작점
length, start = map(int,input().split())
# 받은 데이터를 연결 형태로 바꾸기
InputData = list(map(int,input().split()))
contact = [[0]*101 for _ in range(101)]
for k in range(0,length,2):
contact[InputData[k]][InputData[k+1]] = 1
# 연락 유무(중복 방문 막기), 거리도 표시
used = [0]*101
used[start] = 1
# 이동 시작
# BFS 선입선출
q = [start]
# 결과
result = start
while q:
num= q.pop(0)
# result 갱신 -> 거리가 멀거나 거리가 같지만 연락받는 사람의 번호가 큰 경우
if used[result] < used[num] or (used[result] == used[num] and result < num):
result = num
for i in range(101):
# 연결되어있고, 연락 한 적 없다면 -> q에 등록, 거리 표시
if contact[num][i] and used[i]==0:
q.append(i)
used[i] = used[num]+1
print(f'#{tc} {result}')
< ❗ 느낀 점 >
오랜만에 알고리즘 문제 풀어서 힘들었다... 매일 2개씩 풀어야지!!!!
q랑 stack은 하도 많이 풀어서 아직 머리 속에 있어서 다행..
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
알고리즘 - 플로이드 (0) | 2022.05.05 |
---|---|
알고리즘 - 다익스트라 (0) | 2022.05.04 |
[SWEA] 5688. 세제곱근을 찾아라 - Python (0) | 2022.04.12 |
[SWEA] 1232. 사칙연산 - Python (0) | 2022.04.11 |
[백준] 10026. 적록색약 - Python (0) | 2022.04.09 |
댓글