728x90
반응형
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1 복사
2 1 5
예제 출력 1 복사
4
예제 입력 2 복사
5 1 6
예제 출력 2 복사
2
예제 입력 3 복사
100 99 1000000000
예제 출력 3 복사
999999901
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
using System;
class Program{
static void Main(){
string[] ss = Console.ReadLine().Split();
int a = int.Parse(ss[0]);
int b = int.Parse(ss[1]);
int v = int.Parse(ss[2]);
int n = 1;
int h = 0;
while(true){
h+=a;
if(h<v){
h-=b;
}else{
Console.Write(n);
break;
}
n++;
}
}
}
|
cs |
-시간 초과 코드

처음 while문을 이용해 문제를 풀었는데 시간 초과가 발생했다.
위 문제는 위 사진과 같이 시간 제한이 상수시간 O(1) 내로 풀어야 한다. 이렇게 하기 위해선 한줄 수식이나 이분탐색을 해야한다. 그래서 한줄 수식을 이용해서 코드를 작성했다.
1
2
3
4
5
6
7
8
9
10
|
using System;
class Program{
static void Main(){
string[] ss = Console.ReadLine().Split();
int a = int.Parse(ss[0]);
int b = int.Parse(ss[1]);
int v = int.Parse(ss[2]);
Console.Write((v-b-1)/(a-b)+1);
}
}
|
cs |
-한줄 수식 코드
목표 높이인 v까지 오르기 위한 날을 계산하기 위한 식을 작성했다.
1. 하루에 a-b미터를 v만큼 올라가면 된다.
2. 하지만 낮에 목표지점까지 올라가면 밤에 b만큼 미끄러지지 않기 때문에 v-b로 계산한다.
3. 그리고 딱 나누어 떨어지지 않을때 하루를 더 가야해서 1을 더해준다.
4. 1을 더해준 식에선 딱 나누어 떨어질 때도 하루를 더해주는 식이 되기 때문에 v-b에서 -1을 한다.
728x90
반응형
'C# > 백준 알고리즘' 카테고리의 다른 글
2022.01.22 [백준] C# 소수 찾기 (0) | 2022.01.22 |
---|---|
2022.01.22 [백준] C# 소수 구하기 (0) | 2022.01.22 |
2022.01.22 [백준] C# 셀프 넘버 (0) | 2022.01.22 |
2022.01.20 [백준] C# 알파벳 찾기 (0) | 2022.01.20 |
2022.01.20 [백준] C# 문자열 반복 (0) | 2022.01.20 |
댓글