반응형
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 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
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static BufferedReader bf;
private static StringTokenizer st;
private static int A, B, V;
public static void main(String[] args) throws IOException {
bf=new BufferedReader(new InputStreamReader(System.in));
st=new StringTokenizer(bf.readLine());
A=Integer.parseInt(st.nextToken());
B=Integer.parseInt(st.nextToken());
V=Integer.parseInt(st.nextToken());
int snail=A;
long days=1L;
if(snail<V) {
days+=(V-snail)/(-B+A);
if((V-snail)%(-B+A)>0) days+=1;;
}
System.out.println(days);
}
}
시간 제한이 0.15초밖에 되지 않아서 계속 틀렸던 문제입니다. 처음에는 for문을 이용하여 답을 찾고자 했으나, 계속 시간 제한이 걸려서, 수학적으로 접근하였습니다.
1. 일단 올라가서 V이상이 되면 1을 출력합니다.
2. 첫날 정상에 오르지 못하면, 남은 높이에서 (-B+A)를 나눠줍니다.
2-1. 2에서 나머지가 존재하면, 나눈 값에 1을 더해줍니다.
2-2. 2에서 나머지가 존재하지 않으면, 나눈 값을 출력합니다.
반응형
'코딩테스트 > 기타' 카테고리의 다른 글
[Java] 백준 7662번 : 이중 우선순위 큐 (0) | 2022.03.02 |
---|---|
[Java] 백준 18111번 : 마인크래프트 (0) | 2022.03.01 |
[Java] 백준 2231번 : 분해합 (0) | 2022.03.01 |
[Java] 백준 1966번 : 프린터 큐 (0) | 2022.03.01 |
[Java] 백준 2529번 : 부등호 (0) | 2022.02.14 |