https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
주의점
1. 시간 제한
2. 정상에 올라간 후에는 미끄러지지 않는다.
알고리즘
분석
달팽이가 하루(낮 + 밤) 동안 올라가는 높이(미터)
하루에 (A - B) 미터씩 총 V미터
BUT
달팽이가 목표 지점에 도달한 날(정상에 올라간 후)에는 미끄러지지 않는다.
➡ 총 (V - B) 미터를 올라가는 셈
결론
최소한 며칠이 걸리는지 일(日) 수 = (V - B) / (A - B)
적용
(V - B) % (A - B) == 0
남은 미터가 없다는 의미 = 정상까지 도달함
(V - B) % (A - B) != 0
남은 미터가 있다는 의미 = 즉 정상까지 하루 더 걸림
풀이
1. Scanner
- Scanner도 시간 초과 나옴 ➡ BufferedReader로 적용해보자
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int A = in.nextInt(); //up
int B = in.nextInt(); //down
int V = in.nextInt(); //total height
int day = (length - down) / (up - down);
//나머지가 있다면 = 더 올라가야 한다면
if((length - down) % (up - down) != 0) {
day++;
}
System.out.println(day);
}
}
2. BufferedReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
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()); //up
int B = Integer.parseInt(st.nextToken()); //down
int V = Integer.parseInt(st.nextToken()); //total height
int day = (length - down) / (up - down);
//나머지가 있다면 = 더 올라가야 한다면
if((length - down) % (up - down) != 0) {
day++;
}
System.out.println(day);
}
}
성능
- BufferedReader > Scanner
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2775번 : 부녀회장이 될테야 - Java (0) | 2022.03.26 |
---|---|
[백준] 10250번 : ACM 호텔 -Java (0) | 2022.03.24 |
[백준] 1193번 : 분수찾기 - Java (0) | 2022.03.23 |
[백준] 2292번 : 벌집 - Java (0) | 2022.03.23 |
[백준] 1712번 : 손익분기점 - Java (0) | 2022.03.22 |
댓글