728x90

문제설명

입력 & 출력

나의 풀이

 

워낙 유명한 문제입니다. 

 

주의해야 할 점은 정상에 도착하면 더 이상 미끄러지지 않는다는 것입니다.

 

예제 입력 2, 1, 5)

day 1 :  2미터 올라가고 1미터 떨어짐 ➡️ 1 미터

day 2 :  2미터 올라가고 1미터 떨어짐  ➡️ 2 미터

day 3 :  2미터 올라가고 1미터 떨어짐  ➡️ 3미터

day 4 :  2미터 올라가고 정상 도착 ➡️ 5 미터

 

 

예제 입력 5, 1, 6)

day 1 :  5미터 올라가고 1미터 떨어짐 ➡️ 4 미터

day 2 :  5미터 올라가는 동안 이미 정상도착  ➡️ 9 미터

 

위와 같기 때문에 단순히 V / A-B를 하면 안 됩니다.

 

이걸 정리해서 문제를 접근하는 방법은 다음과 같습니다.

  1. 하루 동안 순수하게 올라가는 높이: 𝐴 − 𝐵
  2. 달팽이가 목표에 도달하기 전날까지 올라가야 하는 높이: 𝑉 𝐴

정리하자면 필요한 일수가 (V-A) % (A-B)0으로 떨어지지 않는다면 마지막날 낮에만 오르면 정상도착이라는 뜻

 

코드 설명을 하자면 빠른 입력을 위해서 BufferedReader 클래스를 사용해 주고, 정수형으로 캐스팅하여 A, B, V에 초기화해 줍니다.

 

그리고 문제의 핵심인 정상까지 필요한 일수days 변수에 저장해 주고, 필요한 일수를 float으로 캐스팅하여 정확한 값을 보면 다음과 같습니다.

 

즉 2 1 5는 0으로 나누어 떨어지고, 5 1 6은 0으로 나누어 떨어지지 않기 때문에 다음날 낮에 오르기만 하면 정상에 도착한다는 뜻입니다.

 

마지막으로 if문으로 분기를 처리하여 days를 반환하여 마무리했습니다.

 

 

참고 ❗

 

[JAVA] 입출력, BufferedReader, StringTokenizer

Java로 코딩테스트를 보거나 입력을 사용해야 할 때 Scanner 클래스를 사용하면 편리하지만 속도가 느리다는 단점이 있습니다. 그렇기 때문에 속도가 빠른 BufferReader 클래스를 사용을 하면 시간복

pixx.tistory.com