시간제한이 있다는 걸 보긴 했지만 우선 반복문으로 풀어보았다.
결과는 당연히 시간초과였고 식을 대체 어떻게 찾아야 하나 고민을 해봤다.
V까지 올라가는 데에 필요한 날짜를 N이라고 했을 때
1일차 낮 : A
1일차 밤 : A - B
2일차 낮 : A - B + A
2일차 밤 : A - B + A -B
이런식으로 진행이 되는데 중요한 점은 이미 V에 도달했다면 더 미끄러지지 않는다는 점이다.
낮과 밤이 한 세트가 아니라는 뜻이니, 낮에 V에 도달했는지 검사하고 그렇지 않으면 하루를 더 추가하기로 했다.
다시 낮의 식을 보면 N*A - (N-1)*B 로 나타낼 수 있는데,
이것이 V 이상이 될 때의 N을 찾아야 하는 문제인 것이다.
이를 식으로 나타내면
V = N*A - N*B + B
V - B = N(A-B)
N = (V - B)/(A-B)
이때 N이 딱 나눠떨어지지 않는다면 다음날까지 가야 V에 도달할 수 있다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
if((V-B)%(A-B)==0){ // 낮에 다 도달했다면
System.out.println((V-B)/(A-B));
}
else{
System.out.println(((V-B)/(A-B))+1);
}
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 2839 : 설탕 배달 JAVA 풀이 (0) | 2022.05.17 |
---|---|
[백준] 10250 : ACM 호텔 JAVA 풀이 (0) | 2022.05.17 |
[백준] 1193 : 분수찾기 JAVA 풀이 (0) | 2022.05.17 |
[백준] 2292 : 벌집 JAVA 풀이 (0) | 2022.05.16 |
[백준] 1712 : 손익분기점 JAVA 풀이 (0) | 2022.05.16 |