최근에 개발된 지능형 기차가 1번역(출발역)부터 10번역(종착역)까지 10개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. 이 장치를 이용하여 출발역에서 종착역까지 가는 도중 기차 안에 사람이 가장 많을 때의 사람 수를 계산하려고 한다. 단, 이 기차를 이용하는 사람들은 질서 의식이 투철하여, 역에서 기차에 탈 때, 내릴 사람이 모두 내린 후에 기차에 탄다고 가정한다.
예를 들어, 위와 같은 경우를 살펴보자. 이 경우, 기차 안에 사람이 가장 많은 때는 2번역에서 3명의 사람이 기차에서 내리고, 13명의 사람이 기차에 탔을 때로, 총 42명의 사람이 기차 안에 있다.
이 기차는 다음 조건을 만족하면서 운행된다고 가정한다.
10개의 역에 대해 기차에서 내린 사람 수와 탄 사람 수가 주어졌을 때, 기차에 사람이 가장 많을 때의 사람 수를 계산하는 프로그램을 작성하시오.
#include <stdio.h>
int main(void) {
int in, out; // in = 탄사람, out = 내린사람
int sum = 0; // 기차에 남아있는 사람을 저장할 변수
int max = 0; // 기차에 사람이 가장 많을 때의 값을 저장할 변수
for(int i=0; i<10; i++) {
scanf("%d %d", &out, &in);
sum = sum - out + in;
if(max < sum) {
max = sum;
}
}
printf("%d\n", max);
return 0;
}
package DFS;
import java.util.Scanner;
public class BJ2460 {
public static void main(String[] args) {
int in, out = 0; // in = 탄사람, out = 내린사람
int sum = 0; // 기차에 남아있는 사람을 저장할 변수
int max = 0; // 기차에 사람이 가장 많을 때의 값을 저장할 변수
Scanner sc = new Scanner(System.in);
for(int i=0; i<10; i++) {
out = sc.nextInt();
in = sc.nextInt();
sum = sum - out + in;
if(max < sum) {
max = sum;
}
}
System.out.println(max);
}
}
package DFS;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ2460 {
public static void main(String[] args) throws IOException {
int in, out = 0;
int sum = 0;
int max = 0;
// buffer 선언
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
for(int i=0; i<10; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
//StringTokenizer에 토큰으로 문자열을 나눠 저장했으니 변수에 넣을때는 형변환 해주기
out = Integer.parseInt(st.nextToken());
in = Integer.parseInt(st.nextToken());
sum = sum - out + in;
if(max < sum) {
max = sum;
}
}
System.out.println(max);
}
}
package DFS;
import java.io.*;
import java.util.StringTokenizer;
public class BJ2460 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
int max = 0;
int[][] passenger = new int[10][2]; // 2차원 배열 생성 (그래프)
for (int i = 0; i < 10; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
passenger[i][0] = Integer.parseInt(st.nextToken()); // out 내리는 사람
passenger[i][1] = Integer.parseInt(st.nextToken()); // in 타는 사람
sum = sum - passenger[i][0] + passenger[i][1];
if (max < sum) {
max = sum;
}
}
System.out.println(max);
}
}

| 내린 사람 | 탄 사람 | → 기차에 남아있는 사람 | |
|---|---|---|---|
| 1번역(출발역) | 0 | 32 | 0 - 0 + 32 = 32 |
| 2번역 | 3 | 13 | 32 - 3 + 13 = 42 |
| 3번역 | 28 | 25 | 42 - 28 + 25 = 39 |
| 4번역 | 17 | 5 | 39 - 17 + 5 = 27 |
| 5번역 | 21 | 20 | 27 - 21 + 20 = 26 |
| 6번역 | 11 | 0 | 26 - 11 + 0 = 15 |
| 7번역 | 12 | 12 | 15 - 12 + 12 = 15 |
| 8번역 | 4 | 2 | 15 - 4 + 2 = 13 |
| 9번역 | 0 | 8 | 13 - 0 + 8 = 21 |
| 10번역(종착역) | 21 | 0 | 21 - 21 + 0 = 0 |
기차에 남아있는 사람 - 내린 사람 + 탄 사람 → 이 값이 제일 큰걸 출력하면 된다.// buffer 선언
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
InputStream()으로 값을 읽고(바이트 단위), InputStreamReader(문자 단위)로 읽고, BufferedReader()로 최종적으로 값을 받아온다.
for(int i=0; i<10; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
//StringTokenizer에 토큰으로 문자열을 나눠 저장했으니 변수에 넣을때는 형변환 해주기
out = Integer.parseInt(st.nextToken());
in = Integer.parseInt(st.nextToken());
...
read()로 처리한 데이터는 Line단위로 나눠지는데, 공백 단위로 데이터를 가공하려면 readLine()을 사용하면 된다. (Buffer를 비울 때 사용)
→ 매 입력마다 공백 단위로 데이터를 가공해주어야 하기 때문에 for문 안에 넣음
이 문제에서는 int형으로 계산을 해주어야 하기 때문에 형변환을 해주어야 했다.
또한 한 칸 입력 시에 숫자 숫자 이런식으로 입력을 해주기 때문에 한 라인에 여러가지를 입력하기 위해 Stringtokenizer를 사용해주어야 했다.
Stringtokenizer는 하나의 문자열을 여러 개의 토큰으로 분리하는 클래스이 Buffer를 출력하는데에는 BufferedWriter()를 사용하는게 맞는데 여기서는 계산한 최대값만 출력하면 되기 때문에 사용하지 않았다.
BufferWriter 사용 방법
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter (System.out)); // 선언
String s = "abcd"; // 출력할 문자열 지정
bw.write(s + "\n"); // 출력
bw.flush(); // 남아있는 데이터 다 출력
bw.close(); // 스트림 닫기
flush()로 해당 버퍼를 비워주고, close()로 버퍼를 닫아준다..write()에는 Enter기능이 없기 때문에, 줄 개행시 \n을 사용한다.트리
root
node
edge (단방향) 가 존재
그래프
이 트리에서 edge가 여러 방향을 가지는 형태
사실 트리가 그래프의 한 형태이다
directed 그래프undirected 그래프cyclic 그래프 (순회 존재)acyclic 그래프 (순회 존재 X)그래프를 표현하는 방법
adjacency matrix (2차원 배열로 표현)
연결된 노드 = 1
연결이 없으면 = 0
(직접적으로)
adjacency list (배열에 노드들을 넣고 linked list로 관계 표현)
참고 자료