[백준] Baekjoon Online Judge
문제
창영이는 매일 버스를 이용해 출퇴근을 한다.
창영이가 사는 도시에는 N개의 버스가 있고, S번 버스에서 E번 버스로 환승하기 위해서는 AS,E원이 필요하다.
창영이가 출근하기 위해 이용하는 M개의 버스가 환승하는 순서대로 주어지고, 모든 버스끼리의 환승 요금이 주어진다.
창영이가 한 번 출근하는데 지불해야하는 환승 요금의 합을 구해보자. 최초에 탑승할 때 지불하는 버스 요금은 제외한다.
입력
첫째 줄에 도시에 존재하는 버스의 개수 N, 창영이가 이용하는 버스의 개수 M이 주어진다.
둘째 줄에 창영이가 이용하는 M개 버스의 번호가 순서대로 주어진다. 버스 번호는 중복되지 않는다.
셋째 줄부터 N개의 줄에 걸쳐 버스의 환승 요금에 대한 정보가 주어진다. S번째 줄의 E번째 수는 AS,E를 의미한다. AS,E는 AE,S와 다를 수 있다.
출력
주어진 M개의 버스를 순서대로 환승하며 탑승했을 때 필요한 환승 요금의 총합을 출력한다.
제한
- 2 ≤ N ≤ 100
- 1 ≤ M ≤ N
- 1 ≤ AS,E ≤ 1,000 (1 ≤ S, E ≤ N)
- 버스의 번호는 1 이상 N 이하의 자연수
- 창영이는 같은 버스를 여러 번 이용하지 않는다.
풀이
#include <iostream>
using namespace std;
int N, M;
int bus[101];
int arr[101][101];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N >> M;
for (int i = 0; i < M; i++) cin >> bus[i];
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) cin >> arr[i][j];
}
int sum = 0;
for (int i = 1; i < M; i++)
sum += arr[bus[i - 1]][bus[i]];
cout << sum << '\n';
return 0;
}
arr[현재 타고 있는 버스][환승할 버스]와 같은 형식으로 배열을 구성하였고, 반복문을 통해 버스 요금을 구하도록 했다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 1000번 - A+B (0) | 2024.11.11 |
---|---|
[Baekjoon/C++] 20540번 - 연길이의 이상형 (0) | 2024.11.08 |
[Baekjoon/C++] 1940번 - 주몽 (0) | 2024.11.06 |
[Baekjoon/C++] 7795번 - 먹을 것인가 먹힐 것인가 (0) | 2024.11.04 |
[Baekjoon/C++] 1520번 - 내리막 길 (1) | 2024.11.01 |