728x90
SMALL
백준 문제 풀이: 17262
문제 링크: https://www.acmicpc.net/problem/17262
문제 설명:
여러 사람의 도착 시간(s
)과 떠나는 시간(e
)이 주어질 때, 모두가 한 번에 머무를 수 없는 시간의 길이를 계산하는 문제입니다. 만약 모두가 한 번에 머무를 수 있다면, 결과는 0
입니다.
문제 해결 코드
// 팬덤이 넘쳐흘러 문제의 최적화된 코드
#include <iostream>
#include <algorithm> // max, min 함수 사용
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n; // 사람의 수
cin >> n;
int maxArrival = -1; // 가장 늦은 도착 시간
int minDeparture = 100001; // 가장 빠른 떠나는 시간
// 각 사람의 도착 및 떠나는 시간 입력
for (int i = 0; i < n; i++) {
int arrival, departure;
cin >> arrival >> departure;
maxArrival = max(maxArrival, arrival); // 도착 시간의 최댓값 갱신
minDeparture = min(minDeparture, departure); // 떠나는 시간의 최솟값 갱신
}
// 결과 계산 및 출력
int result = max(0, maxArrival - minDeparture); // 모두가 머무를 수 없는 시간
cout << result << '\n';
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명:
- 핵심 알고리즘: 각 사람의 도착 시간 중 최댓값과 떠나는 시간 중 최솟값을 비교합니다. 최댓값이 최솟값보다 크면, 그 차이를 결과로 출력합니다.
- 구현 세부사항:
maxArrival
: 모든 사람의 도착 시간 중 최댓값을 저장합니다.minDeparture
: 모든 사람의 떠나는 시간 중 최솟값을 저장합니다.max(0, maxArrival - minDeparture)
: 만약 도착 시간이 떠나는 시간보다 작다면 모두가 머무를 수 있는 경우이므로 결과는 0입니다. 그렇지 않으면 그 차이를 출력합니다.- 시간 복잡도 분석:
- 입력 처리:
O(n)
(각 사람의 도착 및 떠나는 시간 확인) - 전체 시간 복잡도:
O(n)
결과
위 코드는 문제의 조건을 효율적으로 처리하며, 입력 크기가 커도 O(n)
시간 안에 해결할 수 있습니다. 간결하고 명확한 구현으로 가독성을 높였습니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 그리디' 카테고리의 다른 글
백준 12788번 [제 2회 IUPC는 잘 개최될 수 있을까?](C++) -yes6686- 티스토리 (2) | 2024.11.13 |
---|---|
백준 20365번 [블로그2](C++) -yes6686- 티스토리 (0) | 2024.09.10 |
백준 20937번 [떡국](C++) -yes6686- 티스토리 (4) | 2024.09.04 |
백준 20310번 [타노스](C++) -yes6686- 티스토리 (4) | 2024.09.03 |
백준 17521번 [Byte Coin](C++) -yes6686- 티스토리 (4) | 2024.09.02 |