[백준] 2455번 지능형 기차

반응형
반응형

문제

최근에 개발된 지능형 기차가 1번역(출발역)부터 4번역(종착역)까지 4개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. 이 장치를 이용하여 출발역에서 종착역까지 가는 도중 기차 안에 사람이 가장 많을 때의 사람 수를 계산하려고 한다. 단, 이 기차를 이용하는 사람들은 질서 의식이 투철하여, 역에서 기차에 탈 때, 내릴 사람이 모두 내린 후에 기차에 탄다고 가정한다.

 내린 사람 수탄 사람 수1번역(출발역)2번역3번역4번역(종착역)

0 32
3 13
28 25
39 0

예를 들어, 위와 같은 경우를 살펴보자. 이 경우, 기차 안에 사람이 가장 많은 때는 2번역에서 3명의 사람이 기차에서 내리고, 13명의 사람이 기차에 탔을 때로, 총 42명의 사람이 기차 안에 있다.

이 기차는 다음 조건을 만족하면서 운행된다고 가정한다.

  1. 기차는 역 번호 순서대로 운행한다.
  2. 출발역에서 내린 사람 수와 종착역에서 탄 사람 수는 0이다.
  3. 각 역에서 현재 기차에 있는 사람보다 더 많은 사람이 내리는 경우는 없다.
  4. 기차의 정원은 최대 10,000명이고, 정원을 초과하여 타는 경우는 없다.

4개의 역에 대해 기차에서 내린 사람 수와 탄 사람 수가 주어졌을 때, 기차에 사람이 가장 많을 때의 사람 수를 계산하는 프로그램을 작성하시오.

입력

각 역에서 내린 사람 수와 탄 사람 수가 빈칸을 사이에 두고 첫째 줄부터 넷째 줄까지 역 순서대로 한 줄에 하나씩 주어진다. 

출력

첫째 줄에 최대 사람 수를 출력한다.  

 

이 문제는 그렇게 까지 어렵지는 않았다. ㅎㅎ

#include <bits/stdc++.h>
using namespace std;

int main () {
  int maxP = 0;
  int current = 0;
  for (int i = 0; i<4;i++) {
    int to,out;
    cin >> out >> to;
    current = current - out + to;
    maxP = max(maxP,current);
  }

  cout << maxP;
}  

내리는 사람과 타는 사람을 입력받는다. 옛날 같았으면 이걸 배열로 받았을텐데....

그냥 이렇게 받아도 될듯 싶다. 현재 인원을 구하려면 타는 사람은 더하고 내리는 사람은 빼주면 된다.

문제에서 2,3번 제약 조건이 아니였으면 문제가 더 어려웠을지도 모르겠다. 아무튼

그렇게 구한 현재 인원을 그냥 출력해주면 안된다.

최대값을 구해줘야 한다.

그러기 위해서는 max라는 STL문법을 이용하였다. 그러면 현재인원과 최대값을 비교하면서 결과를 도출 한다.

 

 

#include <stdio.h>
int main(void){
    int max = 0;
    int current = 0;
    for(int i = 0; i < 4; i++){
        int in, out;
        scanf("%d %d", &out, &in);
        current = current+in-out;
        max = max > current ? max : current;
    }
    printf("%d", max);
}

대체적으로 비슷한것 같다. 그렇게 어려운 문제가 아니였기에... 응용할 수 있는 부분은 없었던것 같다.

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준]9465번 스티커  (0) 2020.04.20
[백준] 1977번 완전 제곱수  (0) 2020.04.18
[백준] 2193번 이친수  (0) 2020.04.16
[백준] 2156번 포도주 시식  (0) 2020.04.15
[백준] 1181번 단어정렬  (0) 2020.04.15

댓글

Designed by JB FACTORY