반응형
여기 쓰잘대기 없이 나무막대를 올라가는 달팽이가 있다.
첫 줄에 세 정수를 입력한다. A B V 낮에 A만큼 올라가고 밤에 B만큼 내려가는데 V까지 올라가야 하고 올라가면 멈춘다.
며칠이 걸릴지 구하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.StringTokenizer;
import java.io.*;
//baekjoon_2869_달팽이는 올라가고 싶다
public class Main{
public static void main(String[] args) throws IOException{
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
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 ans = 1 + ((v-a) % (a-b) == 0 ? (v-a) / (a-b) : (v-a) / (a-b) + 1);
bw.write(ans+"\n");
bw.flush();
br.close();
bw.close();
}
}
|
cs |
문제 자체는 간단한데 거참.. 시간제한이 매우 짧게 걸려있어서 귀찮은 문제다.
Scanner로 풀면은 어지간해서는 시간초과가 떠버리고 만다.
그래서 BufferdWriter과 BufferedReader로 입출력을 하면 통과가 된다.
그리고 알고리즘자체는 15라인에 있는데 간단하게 살펴보자면~
v는 올라가야할 길이 a는 하루에 올라가는 높이 b는 하루에 떨어지는 높이 즉 a-b가 하루에 올라가는 높이가 된다.
그런데 보기에는 v까지니까 v / a-b로 계산해야 할 것 같은데 보면은 v-a / a-b로 되어 있다.
그것은 v까지 올라가기만 하면 미끄러지지 않기 때문에 하루는 a-b가 아니라 도달하고 끝이게 된 것이다.
그리고 삼항연산에서 체크하는 것은 나눠 떨어지느냐 아니냐 인데 나눠 떨어지면 딱 낮에 a만큼 올라가서 정상인 것이고 나눠 떨어지지 않으면 a 보다 적은 값으로 도착하지 못하여 다시 떨어지고 올라가서 하루 뒤에 도착하는 것을 뜻한다.
그래서 뒤에 + 1을 해주고 다시 전체에 + 1 을 해주는 것은 처음 출발할 때 0에서 출발하기 때문이다.
반응형
'프로그래밍 > 백준 알고리즘 코드' 카테고리의 다른 글
백준 2775번 java 부녀회장이 될테야~~! <수학1> (2) | 2020.12.23 |
---|---|
백준 10250 java ACM 호텔 [수학1] (0) | 2020.12.07 |
백준 1193번 java 자바 분수찾기 [수학1] (2) | 2020.11.28 |
백준 2292번 java 자바 벌집 [수학1] (0) | 2020.10.25 |
백준 2839번 java 자바 설탕배달 (수학 1) (0) | 2020.10.17 |
댓글