코딩테스트/문제풀이

[코드트리] X 달리기

알렉스 페레이라 2023. 5. 9. 16:39

이번에도 일어난 상황에 대해서 추론을 하여  적합한 답을 출력하는 문제다.

 

가야하는 거리가 주어지고, 시작속도를 1m/s로 시작해서 특정거리를 도달할때 다시 속도가 1m/s이여야 한다.

선택하여 속도를 1씩 늘리거나, 유지하거나, 1씩줄일수 있다. 가야하는 거리까지 가는데 가장 최단시간을 구해야한다.

 

오늘 뭔가 문제가 잘풀린다.. 나는 추론에 강한가,,, 후후후후,,,,


Xm 만큼 달리기를 진행하려 합니다. 1m/s로 시작하되, 1초에 한 번씩 속도를 유지할 것인지, 1m/s 만큼 증가시킬 것인지, 1m/s 만큼 감소시킬 것인지를 결정할 수 있습니다. 단, 도착지에 도달하는 순간의 속력은 꼭 1m/s가 되어야만 합니다. 가능한 최단 시간을 구하는 프로그램을 작성해보세요. 단, 이동하는 도중 0m/s가 되어서는 안됩니다.

 

입력 형식

첫 번째 줄에 X가 주어집니다.

  • 1 ≤ X ≤ 10,000

출력 형식

첫 번째 줄에 가능한 최단 시간을 출력합니다.

 

입출력 예제

예제1

입력:

10

 

출력:

6

 

예제 설명

다음과 같이 이동하면 6초 후에 1m/s 속도로 도착지(10m)에 도달하게 됩니다.

     0~1초  1~2초  2~3초  3~4초  4~5초  5~6초
속력  1m/s  2m/s   3m/s  2m/s   1m/s  1m/s
거리   1m    3m     6m    8m     9m    10m

내 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();


        //속도를 올렸을때, 남은거리가 (속도) + (속도-1) + ... + 1보다 크다면 올려도 된다,
        //속도를 유지했을때, 남은거리가 (속도) + (속도-1) + ... + 1보다 크다면 유지해도 된다,
        //위 두 상황이 아니라면 속도를 감소해야한다.

        //초깃값
        int distance = 1;
        int speed = 1;
        int time = 1;

        int ret = 0;
        while(true){
            if(getDescSum(speed+1) <= x-distance){ //속도를 올려도 남은거리를 정확하게 완주할 수 있다면, 속도를 올린다
                speed++;
            }else if(getDescSum(speed) <= x-distance){ //속도를 유지해서 남은거리를 정확하게 완주할 수 있다면, 속도를 유지한다
                //do nothing
            }else{ //속도를 줄여야만 남은거리를 정확하게 완주할 수 있으므로, 속도를 줄인다.
                speed--;
            }
            time++;
            distance += speed;

            if(distance == x){
                ret = time;
                break;
            }
        }
        System.out.print(ret);
    }

    static int getDescSum(int num){
        if(num == 1){
            return num;
        }else{
            return num + getDescSum(num-1);
        }
    }
}

'코딩테스트 > 문제풀이' 카테고리의 다른 글

[코드트리] 세 수의 최대 곱  (0) 2023.05.14
[코드트리] ABC 줄 세우기  (1) 2023.05.12
[코드트리] 코딩톡  (0) 2023.05.09
[코드트리] 구간 잘 나누기  (0) 2023.05.08
[코드트리] 스승의 은혜3  (1) 2023.05.04