본문 바로가기

BOJ 2869번 : 달팽이는 올라가고 싶다 본문

BOJ

BOJ 2869번 : 달팽이는 올라가고 싶다

00rigin 2020. 3. 22. 01:11

시간 제한을 생각하지 않고 풀어서 몇번 틀렸다...ㅎㅎ

다들 시간 제한 잘 보고 어떻게 풀지 생각 합시다!

일반적으로 while문을 사용하게 된다면 10억번을 돌 수도 있게 되어 10초라는 어마 무시한 시간이 걸리게 된다.

그래서 수식을 만들어 생각 해야 한다.

 

D-1 째날, 달팽이가 (V-A)m 까지 올라가있다면, D쨋날 탈출을 할 수 있다는 점을 생각하여 식을 꾸리면 다음과 같다.

(A-B)(D-1) >= (V-A)

위 식을 통해 D를 구하려는 식으로 바꾼다면,

D >= (V-A) / (A-B) + 1

일 것이고, D가 만약 3.33처럼 소수점을 가진다면, 4일이 걸린다는 것을 알 수 있다.

위처럼 실수인지 정수인지 확인하는 if문을 통해 출력을 하면 된다.

 

실수인지 정수인지 확인하는 방법:

t가 실수라고 가정하면,

t-(int)t 가 0이면 정수, 아니면 실수인 것을 알 수 있다.

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
 
double a, b, v; // float는 오차율이 매우 높으므로 double 을 사용하자!
double res = 0;
 
void Input() {
    cin >> a >> b >> v;
}
 
void Solve() {
    res =  (v - a) / (a - b) + 1;
    if (res - (int)res != 0cout << (int)res + 1;
    else cout << (int)res;
}
 
int main() {
    Input();
    Solve();
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

문제:

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

 

2869번: 달팽이는 올라가고 싶다

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽

www.acmicpc.net

 

'BOJ' 카테고리의 다른 글

BOJ 15953번 : 상금 헌터  (0) 2020.04.09
BOJ 9375번 : 패션왕 신해빈  (0) 2020.04.09
BOJ 10844번 : 쉬운 계단 수  (0) 2020.03.15
BOJ 6603번 : 로또  (0) 2020.03.15
BOJ 1182번 : 부분수열의 합  (0) 2020.03.15
Comments