지구정복

[수학] 백준 - 달팽이는 올라가고 싶다 본문

데이터 엔지니어링 정복/Algorithm

[수학] 백준 - 달팽이는 올라가고 싶다

nooh._.jl 2021. 7. 24. 19:04
728x90
반응형

https://www.acmicpc.net/problem/2869

 

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

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

www.acmicpc.net

 

-문제해설

처음에 반복문으로 풀었는데 숫자가 커질 경우 시간초과가 나왔다...

그래서 수학적인 코드로 바꿨는데도 25퍼정도 지나가면 시간초과가 나왔다. 원래 BufferedWriter쓰는게 더 빠른 줄 알았는데 입력받을 때만 BufferedReader쓰고 출력할 때는 System.out.println() 쓰니깐 시간초과가 안나왔다

여태까지 출력은 맨날 BufferedWriter썼는데 앞으로 쓰지 말아야겠다 ㅎㅎ

 

수학식을 생각하기 위해 여러가지 테스트케이스를 확인해보았다. 문제에서 주어진 예제말고도

100 50 200 >> 정답 3

7 5 19 >> 정답 7

3 2 6 >> 정답 4

등을 하면서 규칙을 찾아내려고 애썼다.

 

찾아낸 규칙은 다음과 같다.

(v-b)%(a-b) == 0 이면 (v-b) / (a-b) 출력

그렇지 않으면 (v-b)%(a-b) + 1을 출력하면 된다.

 

 

 

-자바

package math;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BJ2869 {
	private static int a, b, v;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer( br.readLine() );
		a = Integer.parseInt( st.nextToken() );
		b = Integer.parseInt( st.nextToken() );
		v = Integer.parseInt( st.nextToken() );
		
		int result = (v-b) / (a-b);
		if( (v-b)%(a-b) != 0 ) System.out.println( ++result );
		else System.out.println( result ); 
	}
}

 

 

-파이썬

a, b, v = map(int, input().split())
res = (v-b)//(a-b)
if (v-b)%(a-b) != 0: res += 1
print( res )
728x90
반응형
Comments