day4 백준 2869번 : 달팽이는 올라가고 싶다 [Java]
문제출처
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
import java.util.Scanner;
public class Q2869 {
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 = -1;
int position = 0;
while(position < V) {
day++;
position += A;
position -= B;
}
System.out.println(day);
sc.close();
}
}
첫번째로 내가 했던 코드다. 시간초과로 틀렸다.
시간초과인 이유는 예를들어 나무가 10억미터라면 while문이 10억번 돌아버리는 대참사가 일어나기도 하는 것이다...
반복문을 사용하지않고 푼경우
import java.util.Scanner;
public class Q2869 {
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 = -1;
int move = A - B;
if(V % move == 0){
day = V / move - 1;
}
else {
day = V / move + 1;
}
System.out.println(day);
sc.close();
}
}
틀렸다.
문제를 정확하게 이해 못했던 부분이 하나있다.
바로 정상에 도달하면 미끄러지지 않는다는 조건...
즉 예제 2 1 5를 했을때 4일이 걸리는 이유는 4번째 날에 밤이 되기전에 정상에 도달하기 때문이다.
그래서 저 코드는 예를들어 하루에 4민터 올라가고 1미터 미끄러질때 막대의 길이가 4이면 답이 1이어야하는데 2가 출력되는 오류가 있다.
import java.util.Scanner;
public class Q2869 {
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 = 0;
if((V - B) % (A - B) == 0) {
day = (V - B) / (A - B);
}
else {
day = (V - B) / (A - B) + 1;
}
System.out.println(day);
sc.close();
}
}
최종 맞은것
'문제풀이 > 코딩테스트' 카테고리의 다른 글
day6 백준 1011번 : Fly me to the Alpha Centauri [Java] (0) | 2020.09.03 |
---|---|
day5 백준 10250번 : ACM 호텔 [Java] (0) | 2020.09.01 |
day3 백준 11720번 : 숫자의 합 [Java] (0) | 2020.08.27 |
day2 백준 2839번 : 설탕 배달 [Java] (0) | 2020.08.27 |
day1 백준 10809번 : 알파벳 찾기 [Python] (0) | 2020.08.24 |