728x90
SMALL
백준 문제 풀이: 4159 [알래스카]
문제 링크: https://www.acmicpc.net/problem/4159
문제 설명:
알래스카 지역에서는 최대 200 마일의 범위 안에서 다음 주유소를 찾아야 합니다. 주어진 주유소의 위치를 바탕으로 정방향과 역방향 모두에서 가능한지 확인하여 "POSSIBLE" 또는 "IMPOSSIBLE"을 출력하세요. 시작점은 0 마일이며, 마지막 주유소에서 1422 마일까지의 거리도 고려해야 합니다.
문제 해결 코드
// 백준 4159 - 알래스카
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
while (true) {
int n;
cin >> n;
if (n == 0) break;
vector stations(n);
for (int i = 0; i < n; i++) {
cin >> stations[i];
}
// 정렬
sort(stations.begin(), stations.end());
// 1422 마일에서 마지막 주유소로 왕복 가능해야 하므로 1422를 추가
stations.push_back(1422);
bool possible = true;
for (int i = 1; i < stations.size(); i++) {
// 인접한 두 주유소 사이의 거리가 200 마일을 초과하면 불가능
if (stations[i] - stations[i - 1] > 200) {
possible = false;
break;
}
}
// 역방향 검증: 마지막 주유소에서 1422로 왕복 가능 여부 확인
if (possible && 1422 - stations[n - 1] > 100) {
possible = false;
}
cout << (possible ? "POSSIBLE" : "IMPOSSIBLE") << '\n';
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘: 정렬 후 인접한 주유소 간의 거리 차이를 확인하여 200 마일 이하인지 검증합니다.
- 구현 세부사항:
- 정렬된 배열을 순회하면서 거리 차이가 200 마일을 초과하는 경우를 탐지합니다.
- 마지막 주유소에서 역방향으로 100 마일 이내에 출발점(1422)이 있어야 합니다.
- 시간 복잡도 분석:
- 정렬: O(n log n)
- 거리 검증: O(n)
- 총 시간 복잡도: O(n log n)
결과
제출 시, 모든 테스트 케이스에 대해 올바른 결과를 출력합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 8974번 [희주의 수학시험](C++) -yes6686- 티스토리 (0) | 2024.11.15 |
---|---|
백준 9546번 [3000번 버스](C++) -yes6686- 티스토리 (0) | 2024.11.14 |
백준 3474번 [교수가 된 현우](C++) -yes6686- 티스토리 (0) | 2024.08.16 |
백준 8674번 [Tabliczka](C++) -yes6686- 티스토리 (0) | 2024.08.10 |
백준 1434번 [책 정리](C++) -yes6686- 티스토리 (0) | 2024.07.28 |