문제 : https://www.acmicpc.net/problem/22113

 

22113번: 창영이와 버스

첫째 줄에 도시에 존재하는 버스의 개수 N, 창영이가 이용하는 버스의 개수 M이 주어진다. 둘째 줄에 창영이가 이용하는 M개 버스의 번호가 순서대로 주어진다. 버스 번호는 중복되지 않는다. 셋

www.acmicpc.net

문제 요약 : 환승 요금의 합 출력

입력 출력
2 ≤ N(버스) ≤ 100
1 ≤ M(환승 버스 번호) ≤ N
1 ≤ A_S,E(환승 요금) ≤ 1000
환승 요금의 합을 출력한다.
(최초에 탑승할 때 지불하는 버스요금 제외)

JAVA

소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_22113.java

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
30868093 cbkpar 22113 맞았습니다!! 15392KB 164ms Java 11 831B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n,m,i,j,s;
		StringTokenizer st = new StringTokenizer(br.readLine());
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		int[] arr = new int[m];
		st = new StringTokenizer(br.readLine());
		for(i=0;i<m;i++) arr[i] = Integer.parseInt(st.nextToken());
		int[][] map = new int[n+1][n+1];
		for(i=1;i<=n;i++) {
			st = new StringTokenizer(br.readLine());
			for(j=1;j<=n;j++) map[i][j] = Integer.parseInt(st.nextToken());
		}
		s = 0;
		for(i=1;i<m;i++) s += map[arr[i-1]][arr[i]];
		System.out.println(s);
	}
}

버스에 탑승했던 순서를 배열에 저장한 뒤

각 버스의 환승에 대한 비용을 2차원 배열에 저장하고

각 버스의 환승에 필요한 금액을 불러와 더해준다.

 

예제 )

4 3

3 1 2

0 2 3 4

5 0 7 8

1 2 0 4

5 6 7 0

 

+ Recent posts