본문 바로가기

BOJ 1011번 : Fly me to the Alpha Centauri 본문

BOJ

BOJ 1011번 : Fly me to the Alpha Centauri

00rigin 2020. 4. 10. 23:19

실버 1 문제라고 겁도 없이 건들였다가 어머어마하게 시간을 뺏겨 버렸다... 규칙을 찾기가 너무 어려웠고, 규칙을 찾은것 같아도, 식으로 풀어내는 과정이 너무 어려웠다.

 

기본적으로, 한 단계마다 속력의 변화가 ±1 이고, 출발과 도착시에 1의 속도를 맞춰야 하기에 무조건 속도를 증가시킬수는 없다. 따라서 속도를 증가시키다 감소 시켜야 한다.

 

처음에는 간단한 수식 한줄로 해결될줄 알았으나, 변수를 어떻게 설정하느냐의 문제였던 것 같다.

 

< Solution >

규칙을 찾기 위해 각 거리마다 최소 이동횟수를 적어보았다.

여기서 이동 횟수가 늘어나는 분기의 규칙성이 있는것같아 이동 횟수(n)에 연관된 변수 (An)을 설정하고, 각 횟수가 늘어나는 거리의 분기 (분기거리)에 따른 식을 만들었다.

그에 따라 일단 늘어나는 만큼 더해주는 식을 쭉 작성해 보았더니 아래와 같은 식을 도출할 수 있었다.

하지만, 식을 직관적으로 이해하는데 조금 복잡해 보여서 마음에 들지는 않는다...

아무튼, 위 식을 바탕으로 코드를 짜면, dp에 들어가는 것은 "거리"에 대한 값이 되고, 인덱스횟수 에 대한 값이 된다.

위 그림에 필기한 예제를 참고하면 쉽다.

 

<소스코드>

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
#include<iostream>
#include<vector>
using namespace std;
 
void Solve() {
    int t;
    long long x, y;
    cin >> t;
    for (int g = 0; g < t; g++) {
        cin >> x >> y;
        long long dist = y-x;
        vector <long long> v;
        int res = 0;
        v.push_back(0);
        v.push_back(1);
        for (int i = 2;; i++) {
            v.push_back(v[i - 1+ ((i) / 2));
            if (v[i - 1<= dist && dist < v.back()) {
                res = i - 1;
                break;
            }
        }
        cout << res << endl;
        v.clear();
    }
}
 
int main() {
    Solve();
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

<문제>

https://www.acmicpc.net/problem/1011

 

1011번: Fly me to the Alpha Centauri

우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다. 그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 그 크기와 질량이 엄청난 이유로 최신기술력을

www.acmicpc.net

 

'BOJ' 카테고리의 다른 글

BOJ 1670번 : 정상 회담 2  (0) 2020.04.12
BOJ 15954번 : 인형들  (1) 2020.04.11
BOJ 15953번 : 상금 헌터  (0) 2020.04.09
BOJ 9375번 : 패션왕 신해빈  (0) 2020.04.09
BOJ 2869번 : 달팽이는 올라가고 싶다  (0) 2020.03.22
Comments