알고리즘/백준
[백준] 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의 사용법을 모르면 풀기 까다로운 문제였다.