본문 바로가기
알고리즘/백준

백준 2869 달팽이는 올라가고 싶다 자바

by reumiii 2019. 11. 4.

맨 처음에 이렇게 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

이 사이트가 친절하고 여러가지 방식으로 풀어본 코드가 있어 참고했다.

댓글