티스토리 뷰

코딩테스트

미래 도시

ajaa 2024. 11. 6. 11:35

📌문제

방문 판매원 A는 많은 회사가 모여 있는 공중 미래 도시에 있다. 공중 미래 도시에는 1번~N번까지의 회사가 있는데 특정 회사끼리는 서로 도로를 통해 연결되어 있다. 방문 판매원 A는 현재 1번 회사에 위치해 있으며, X번 회사에 방문해 물건을 판매하고자 한다.

연결된 두개의 회사는 양방향으로 이동할 수 있고 특정 회사와 다른 회사가 도로로 연결되어 있다면 1만큼의 시간으로 이동할 수 있다.

또한 방문 판매원 A는 기대하던 소개팅에도 참석하고자 한다. 소개팅 상대는 K번 회사에 존재한다. A는 X번 회사에 가서 물건을 판매하기 전에 먼저 소개팅 상대의 회사에 찾아가서 함께 커피를 마실 예정이다. 따라서 A는 1번 회사에서 출발하여 K번 회사를 방문한 뒤에 X번 회사로 가는 것이 목표이다. 방문 판매원이 회사 사이를 이동하게 되는 최소 시간을 계산하는 프로그램을 작성하시오.

 

📌풀이

플로이드 워셜 알고리즘 문제

1번 노드에서 K를 거쳐 X로 가는 최단 거리=(1번 노드에서 K까지의 최단 거리 + K에서 X까지의 최단 거리)

 

📌코드

INF = int(1e9)  # 무한, 10억

# 노드의 개수 및 간선의 개수 입력
n, m = map(int, input().split())
# 2차원 리스트를 만들고 모든 값 무한으로 초기화
graph = [[INF] * (n + 1) for _ in range(n + 1)]

# 자기 자신에서 자기 자신으로 가는 비용은 0으로 초기화
for a in range(1, n + 1):
    for b in range(1, n + 1):
        if a == b:
            graph[a][b] == 0

# 각 간선에 대한 정보 입력받아 초기화
for _ in range(m):
    # A와 B가 서로에게 가는 비용은 1이라고 설정
    a, b = map(int, input().split())
    graph[a][b] = 1
    graph[b][a] = 1

# 거쳐 갈 소개팅 노드 X와 최종 목적지 노드 K 입력받기
x, k = map(int, input().split())

# 플로이드 워셜 알고리즘 수행
for k in range(1, n + 1):
    for a in range(1, n + 1):
        for b in range(1, n + 1):
            graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])

# 최소 이동 시간 계산
distance = graph[1][k] + graph[k][x]

# 도달할 수 없는 경우 -1 출력
if distance >= INF:
    print("-1")
# 도달할 수 있다면 최단 거리 출력
else:
    print(distance)

 

 

📌참고

https://g.co/kgs/eyd5SSd

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오・삼성전자・네이버・라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다! IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년

www.google.com

 

 

'코딩테스트' 카테고리의 다른 글

그래프, 서로소 집합  (1) 2024.11.08
전보  (3) 2024.11.07
최단 경로, 플로이드 워셜 알고리즘  (1) 2024.11.05
최단 경로, 개선된 다익스트라 알고리즘  (1) 2024.11.04
최단 경로  (0) 2024.11.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
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
글 보관함