[백준 30366] Roller Coaster (C#, C++) - soo:bak
작성일 :
문제 링크
설명
열차가 매 분마다 출발하고, 각 그룹은 반드시 한 열차에 모두 같이 탑승해야 할 때, 각 그룹의 탑승 시각을 구하는 문제입니다.
접근법
먼저 현재 열차 시각과 남은 좌석 수를 관리합니다.
다음으로 각 그룹에 대해 남은 좌석이 부족하면 다음 열차로 넘어갑니다. 그룹 인원은 항상 최대 좌석 수 이하이므로 한 번만 넘기면 충분합니다.
이후 해당 열차에 탑승시키고 현재 시각을 출력합니다. 시간 복잡도는 O(N)입니다.
Code
C#
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
using System;
using System.IO;
class Program {
static void Main() {
using var writer = new StreamWriter(Console.OpenStandardOutput());
var first = Console.ReadLine()!.Split();
var n = int.Parse(first[0]);
var m = int.Parse(first[1]);
var a = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
var t = 0;
var rem = m;
for (var i = 0; i < n; i++) {
var g = a[i];
if (rem < g) {
t++;
rem = m;
}
rem -= g;
writer.WriteLine(t);
}
}
}
C++
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
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m; cin >> n >> m;
vi a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
int t = 0;
int rem = m;
for (int i = 0; i < n; i++) {
int g = a[i];
if (rem < g) {
t++;
rem = m;
}
rem -= g;
cout << t << "\n";
}
return 0;
}