알고리즘/백준

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

땀두 2022. 3. 19. 23:10

 

import java.util.Scanner;

public class p2869{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);

		int a = sc.nextInt();
		int b = sc.nextInt();
		int v = sc.nextInt();
		int cnt = 0;

		for (;;) {
			cnt++;
			v -= a;
			if (v <= 0) {
				System.out.println(cnt);
				return;
			} else {
				v += b;
			}
		}
	}
}
 

처음에 문제를 푼 방법은 반복문을 이용하여서 풀었다. 정답은 맞았지만 시간초과가 났기에 반복문을 쓰지 않고 수학 연산을 통해서 해결하는 방법을 생각했다.

import java.util.Scanner;

public class p2869{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);

		int a = sc.nextInt();
		int b = sc.nextInt();
		int v = sc.nextInt();
		int cnt = 0;

		cnt = (v-b)/(a-b);
		if ((v - b) % (a - b) != 0) {
			cnt++;
		}
		System.out.println(cnt);

	}
}
 

그래서 다음과 같이 식을 만들어서 문제를 해결했지만 이 역시 시간초과가 나왔다. 그래서 Scanner 대신 더 효율적인 BufferedReader 를 사용하였다.

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

public class p2869 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		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 cnt = 0;

		cnt = (v - b) / (a - b);

		if ((v - b) % (a - b) != 0) {
			cnt++;
		}
		System.out.println(cnt);
	}
}
 

이렇게 문제를 해결할 수 있었다.

문제 자체는 어렵지 않았지만 문제에 있는 시간제한이 까다로운 문제였고, BufferedReader의 사용법을 모르면 풀기 까다로운 문제였다.