[백준 4159번] 알래스카
Updated:
문제 화면
문제 링크 : https://www.acmicpc.net/problem/4159
문제 풀이
이 문제는 조건에 맞게 숫자들을 인풋 받고 인풋받은 숫자들로 계산을 하면 되는 문제이다.
구상
사용자로부터 충전소의 개수 n을 입력받고 n번만큼 충전소의 위치를 입력받고 위치를 정렬하여 각 충전소 사이의 거리가 200보다 크지 않은지를 확인한다. 마지막 충전소의 경우 항상 1422보다 작거나 같기 때문에 (1422(델타 정션의 위치)-마지막 충전소의 위치)*2가 200보다 작은지 확인한다. 만약 모든 조건이 만족될 경우 “POSSIBLE”을 출력하고 그렇지 않을 경우 “IMPOSSIBLE”을 출력한다.
제출 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int input, n;
int answer;
vector <int> v;
while(1) {
answer = 1; // 1인 경우 POSSIBLE을 출력한다.
cin >> input;
if(input == 0) break; // 사용자가 충전소의 개수로 0을 입력할때까지 계속 입력받는다
for(int i = 0 ; i < input ; i++) {
cin >> n;
v.push_back(n);
} // 각 충전소의 위치를 벡터에 넣는다
sort(v.begin(), v.end()); // 벡터를 정렬한다
for(int i = 1 ; i < v.size() ; i++) {
if(v[i]-v[i-1]>200) {
answer = 0;
break;
}
} // 각 벡터의 값을 확인해서 거리가 200이 넘지 않는지를 확인한다.
// 넘게 되는 경우 IMPOSSIBLE을 출력할 수 있도록 answer = 0으로 설정한다.
if((1422-v[v.size()-1])*2 >200) {
answer = 0;
} // 마지막 충전소도 확인한다.
if(answer==1) cout << "POSSIBLE" << endl; // 모든 충전소의 거리가 200 이하인 경우
else cout << "IMPOSSIBLE" << endl; // 충전소의 거리가 하나라도 200 이상인 경우
v.clear();
}
return 0;
}
결론
이번 문제는 조건에 맞게 숫자를 입력받고 거리를 계산할 수 있는지 물어보는 구현 문제이다. 이해한 것을 최대한 빠르게 코드로 구현하는 것을 연습하기에 좋은 문제인 것 같다.
Leave a comment