문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
풀이
반복문을 활용한다
근데 시간초과로 나온다. 방법이 이게 아닌가 보다
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int V = sc.nextInt();
int now = 0;
int day = 0;
while(now<V) {
now -=B;
if(day==0) {
now = 0;
}
now += A;
day ++;
}
System.out.println(day);
}
}
수학적인 계산을 진행한다
달팽이가 도착하기 전 날을 day-1이라고 하자
그 날 밤 달팽이는 (day-1)*(A-B)만큼 올라가 있을 것이다
그리고 도착 당일날(day) 낮 때의 높이는 (day-1)*(A-B)+A이다
부등식을 만들면 (day-1)*(A-B)+A >= V이다
정리하면 day >= (V-A)/(A-B) + 1 이 된다
조건
숫자데이터를 int로 받는다
(V-A)/(A-B)가 정확히 나누어 떨어지는 경우가 아니면 day = (V-A)/(A-B)+2이 된다
정확히 나누어 떨어질 때만 -1을 해주면 된다
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int V = sc.nextInt();
int day = (V-A)/(A-B)+2;
if( (V-A)%(A-B)==0) {
day--;}
System.out.print(day);
}}
?
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double A = sc.nextInt();
double B = sc.nextInt();
double V = sc.nextInt();
int day = (int)Math.ceil((V-A)/(A-B)+1);
System.out.print(day);
}}
??
어쩔 수 없이 buffer를 사용한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
int day = (V-A)/(A-B)+2;
if((V-A)%(A-B)==0) {
day--;
}
System.out.print(day);
}}
scanner는 숏코딩 용도인가 보다
'Study > Baekjoon' 카테고리의 다른 글
Baekjoon1011: Fly me to the Alpha Centauri (0) | 2021.10.13 |
---|---|
Baekjoon10250: ACM 호텔 (0) | 2021.10.12 |
Baekjoon1193: 분수찾기 (0) | 2021.10.12 |
Baekjoon2292: 벌집 (0) | 2021.10.12 |
Baekjoon1712: 손익분기점, Scanner의 위대함 (0) | 2021.10.12 |