맨 처음에 이렇게 while문 무한루프를 사용하여 코딩했는데,
자꾸 '시간초과'가 떴다..ㅠ.ㅠ
시간초과가 뜬 초기 코드↓
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
long a = sc.nextInt(); // 낮에 올라가는 높이
long b = sc.nextInt(); // 밤에 미끄러지는 높이
long v = sc.nextInt(); // 목표 높이
long height = 0; // 현재 높이
long day = 0; // 일수
while (true) {
day++;
height += a;// 낮에 올라감
if (v <= height) { // 정상에 올라가면 끝!
break;
}
height -= b; // 밤에 미끄러짐
}
System.out.println(day);
}
}
그래서 인터넷에 검색해보니
while문으로 하면 시간초과가 나는것!
수학적으로 풀어야했다.
성공한 코드↓
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(); // 목표 높이
/*
* ~ 계산 ~
(a-b) * day +b > v
(a-b) * day > v - b
day > (v-b)/(a-b)
*/
int day = (v - b) / (a - b); // 일수
if ((v - b) % (a - b) != 0) {
day++;
}
System.out.println(day);
}
}
참고한 사이트↓
https://sjs2215.tistory.com/91
[JAVA] 백준 2869번
[백준 2869] 달팽이 문제: https://www.acmicpc.net/problem/2869 문제 이해: (1 ≤ B < A ≤ V ≤ 1,000,000,000) 낮에 a 올라갈 수 있고, 밤에는 b 미끄러진다. 그러나 v미터인 정상에 도착하면 밤이어도 미끄러..
sjs2215.tistory.com
이 사이트가 친절하고 여러가지 방식으로 풀어본 코드가 있어 참고했다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 2775 부녀회장이 될거야 자바 (0) | 2019.11.20 |
---|---|
백준 10250 ACM 호텔 자바 (0) | 2019.11.06 |
백준 1011 Fly me to the Alpha Centauri 자바 (0) | 2019.11.02 |
백준 1193 분수 찾기 자바 (0) | 2019.10.31 |
백준 2292 벌집 자바 (0) | 2019.10.30 |
댓글