일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
- 그래픽 디자인
- T자형 인재
- 2025 대한민국 채용박람회
- 마인크래프트
- 배열 리스트
- i자형 인재
- 라자냐
- 브루트포스 알고리즘
- unity engine
- 이진 탐색
- VRoid Studio
- 자료구조
- 잴다의 전설 티어스 오브 더 킹덤
- 빅오 표기법
- 택시 기하학
- 스택
- 그리디 알고리즘
- c#
- blender
- 다이나믹프로그래밍
- vrm posing desktop
- 카니발대학교 공대강국
- VPS
- windows 12
- 시작
- 우선순위 큐
- 코딩테스트
- 닌텐도 스위치 2
- 영어
- 큐
- Today
- Total
WalkerJei's Lifelog
백준알고리즘 2455번 지능형 기차 C# 본문
세부 정보
- 사이트: 백준알고리즘
- 번호: 2455
- 문제명: 지능형 기차
- 언어: C#
- 분류: 수학, 구현, 사칙연산
- 비고:
문제
최근에 개발된 지능형 기차가 1번역(출발역)부터 4번역(종착역)까지 4개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. 이 장치를 이용하여 출발역에서 종착역까지 가는 도중 기차 안에 사람이 가장 많을 때의 사람 수를 계산하려고 한다. 단, 이 기차를 이용하는 사람들은 질서 의식이 투철하여, 역에서 기차에 탈 때, 내릴 사람이 모두 내린 후에 기차에 탄다고 가정한다.
내린 사람 수 | 탄 사람 수 | |
1번역(출발역) | 0 | 32 |
2번역 | 3 | 13 |
3번역 | 28 | 25 |
4번역(종착역) | 39 | 0 |
예를 들어, 위와 같은 경우를 살펴보자. 이 경우, 기차 안에 사람이 가장 많은 때는 2번역에서 3명의 사람이 기차에서 내리고, 13명의 사람이 기차에 탔을 때로, 총 42명의 사람이 기차 안에 있다.
이 기차는 다음 조건을 만족하면서 운행된다고 가정한다.
- 기차는 역 번호 순서대로 운행한다.
- 출발역에서 내린 사람 수와 종착역에서 탄 사람 수는 0이다.
- 각 역에서 현재 기차에 있는 사람보다 더 많은 사람이 내리는 경우는 없다.
- 기차의 정원은 최대 10,000명이고, 정원을 초과하여 타는 경우는 없다.
4개의 역에 대해 기차에서 내린 사람 수와 탄 사람 수가 주어졌을 때, 기차에 사람이 가장 많을 때의 사람 수를 계산하는 프로그램을 작성하시오.
입력
각 역에서 내린 사람 수와 탄 사람 수가 빈칸을 사이에 두고 첫째 줄부터 넷째 줄까지 역 순서대로 한 줄에 하나씩 주어진다.
출력
첫째 줄에 최대 사람 수를 출력한다.
풀이
두 번째 역부터 종착역까지는 반복문으로 계산하고 첫 번째 역에서 탔을 때는 분리해서 계산한다.
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
// 열차에 타고 내리는 사람 수
int[,] people = new int[4, 2];
// 정류장별 기차에 탑승한 사람 수
int[] station = new int [4];
// 가장 많이 탑승했을 때 인원
int maxPeople = 0;
// 내린 사람 수와 탄 사람 수 입력
for (int i = 0; i < 4; i++)
{
string input = sr.ReadLine();
people[i, 0] = Convert.ToInt32(input.Split()[0]);
people[i, 1] = Convert.ToInt32(input.Split()[1]);
}
// 첫 번째 역에 있을 때 기차에 탄 사람 수 계산
station[0] += people[0, 1] - people[0, 0];
for (int i = 1; i < 4; i++)
{
// 두 번째 역부터 종착역까지 기차에 탄 사람 수 계산
station[i] += station[i - 1] + (people[i, 1] - people[i, 0]);
// 가장 많이 탑승했을 때 인원 계산
maxPeople = Math.Max(maxPeople, station[i]);
}
// 가장 많이 탔을 때 사람 수 출력
sw.WriteLine(maxPeople);
sr.Close();
sw.Close();
후기
드디어 제한 시간 내에 문제를 푸는 데 성공했다! 문제의 난이도는 잘 모르겠지만 적당했다. 문제를 다 풀고 나니까 소스 코드를 단축시킬 방법이 떠올랐다. 단축량은 적었지만 한 번 공개하겠다.
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
// 열차에 타고 내리는 사람 수
int[][] people = new int[4][];
// 정류장별 기차에 탑승한 사람 수
int[] station = new int [4];
// 가장 많이 탑승했을 때 인원
int maxPeople = 0;
// 내린 사람 수와 탄 사람 수 입력
for (int i = 0; i < 4; i++)
people[i] = sr.ReadLine().Split().Select(int.Parse).ToArray();
// 첫 번째 역에 있을 때 기차에 탄 사람 수 계산
station[0] += people[0][1] - people[0][0];
for (int i = 1; i < 4; i++)
{
// 두 번째 역부터 종착역까지 기차에 탄 사람 수 계산
station[i] += station[i - 1] + (people[i][1] - people[i][0]);
// 가장 많이 탑승했을 때 인원 계산
maxPeople = Math.Max(maxPeople, station[i]);
}
// 가장 많이 탔을 때 사람 수 출력
sw.WriteLine(maxPeople);
sr.Close();
sw.Close();
제한 시간 내에 풀 정도로 실력이 좋아져서 기쁘다. 보다 어려운 문제도 지금처럼 해결할 수 있다면 더 좋다.
'소프트웨어 개발 > 코딩테스트(기성 문제)' 카테고리의 다른 글
백준알고리즘 3053번 택시 기하학 C# (0) | 2025.04.23 |
---|---|
백준알고리즘 2745번 진법 변환 C# (0) | 2025.04.21 |
백준알고리즘 5597번 과제 안 내신 분..? C# (1) | 2025.04.19 |
백준알고리즘 1100번 하얀 칸 C# (0) | 2025.04.18 |
백준알고리즘 11656번 접미사 배열 C# (0) | 2025.04.17 |