초등학교 수학 문제에서 많이 봤던 문제이다.
낮에 이동하고 밤에 미끄러지기 때문에 낮에 이동했을 때 목표 거리와 비교한 뒤 만족하지 않았다면
미끄러진 높이를 계산하는 계산을 반복하면 되는 문제라고 생각했다.
하지만 결과는 시간 초과...
그래서 다음엔 배열을 이용해 봤다. 배열일 연산이 제일 빠르기 때문에 시간 초과 문제를 해결할 거라 생각했다.
낮에 이동한 거리의 배열과 미끄러진 후의 거리 배열을 생성하여 낮에 이동한 거리가 목표 높이에 도달하기까지 반복하여 index를 출력하면 될 줄 알았다.
하지만 이번에는 메모리 초과....
한참 고민하다 해답이 떠올랐다.
결국 마지막에는 앞으로 이동을 해야 하기 때문에, 앞으로 가는 거리를 목표 높이에서 뺀 뒤
실제로 이동하는 거리(앞 - 뒤)로 나누어 주면 정답을 구할 수 있다.
다음은 Java로 작성한 코드이다.
import java.util.Scanner;
public class snail {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//이동하는 거리
int front = scan.nextInt();
//미끄러지는 거리
int back = scan.nextInt();
//목표 높이
int target = scan.nextInt();
//실제로 하루에 이동하는 거리
int move = front - back;
target -= front;
if(target%move == 0) {
System.out.print(target/move + 1 );
}else {
System.out.print(target/move + 2 );
}
}
}
마지막으로 이동하는 하루를 먼저 count한뒤, 목표 높이를 마지막 이동이 있기 전까지의 높이로 만든다.
그리고 실제 움직이는 거리로 목표 높이를 나눈다.
만약, 나누어 떨어진다면 나눈 몫에 마지막 움직이는 하루를 더해 출력하고,
그렇지 않다면 나머지 만큼의 높이가 부족하기 때문에 몫에 마지막 하루 + 나머지 높이 이동에 필요한 하루를 더해주어 출력하면 된다.