[백준 4159번] 알래스카

Updated:


문제 화면

BOJ

문제 링크 : https://www.acmicpc.net/problem/4159

문제 풀이

이 문제는 조건에 맞게 숫자들을 인풋 받고 인풋받은 숫자들로 계산을 하면 되는 문제이다.

구상

BOJ

사용자로부터 충전소의 개수 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