Algorithm/Java

[백준알고리즘] 2869번 달팽이는 올라가고 싶다 (JAVA)

yujin.me 2021. 2. 22. 13:24

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

 

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

 

예제

 

풀이

문제에서 유의해야 할 2가지 조건

  • 0.15 초의 제한시간

  • 정상에 올라간 후에는 미끄러지지 않는다

 

1) Scanner

import java.util.*;
import java.lang.*;
import java.io.*;

public class Main{
	public static void main (String[] args) throws java.lang.Exception	{
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(); // 낮에 올라갈 수 있는 길이
		int B = sc.nextInt(); // 자는 동안 미끄러지는 길이
		int V = sc.nextInt(); // 나무막대 높이
		
		int sum = 0; // 합계
		int day = 1;
		
		while(true){
			sum = sum+A; 
			// 낮에 올라간 수와 나무막대 높이가 같거나 클 때 break
			if(sum >= V){
				break;
			} 
			sum = sum-B; 
			day++; // 밤이 지나고나서 day++;
		}
		System.out.print(day);
	}
}

별 생각없이 풀었다 정말.. 내게는 수학머리가 없는 걸까? 눈물..

1. 처음에 V / (A+B) 로 했다가 결과값이 다르게 나와서 문제를 다시 읽었더니 정상에 올라간 후에는 미끄러지지 않는다라는 조건이 있었다.

2. 일단 위 풀이에서 while문을 돌려서 시간이 들어서 시간초과가 나왔다.

 

2) BufferedReader & BufferedWriter

import java.util.*;
import java.lang.*;
import java.io.*;

public class Main{
	public static void main (String[] args) throws java.lang.Exception	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 콘솔에서 입력받는 경우
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		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 day = (V-B) / (A-B);
		if((V-B)%(A-B)!=0){ // 나머지가 있을 경우 == 잔여일수가 있을 경우
			day++;
		}
		bw.write(String.valueOf(day));
		bw.flush();
		bw.close();
	}
}

1. 빠른 시간처리를 위해 BufferedReader를 사용했다. 

2. 나무막대 높이-자는 동안 미끄러지는 길이에서 낮-밤을 뺀 값을 나눈다.

3. 나머지가 있을 경우에는 낮에 올라간 길이가 정상이거나 넘으면 day에 1이 추가되므로 해당 조건식을 추가한다.

 

참고

st-lab.tistory.com/75

 

[백준] 2869번 : 달팽이는 올라가고 싶다 - JAVA [자바]

https://www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만,

st-lab.tistory.com

 

출처

www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

 

반응형