미소를뿌리는감자의 코딩

[백준 2024/01/15] 2869번 본문

코딩 테스트/백준

[백준 2024/01/15] 2869번

미뿌감 2024. 1. 15. 22:37
728x90

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

 

달팽이는 올라가고 싶다~를 풀어보았다.

 

1) 접근 방법

A B V 가 차례로 공백으로 구분하여 받는다.

a -> 낮에 이동하는 거리

b-> 뒤로 미끄러지는 거리

v -> 총 이동거리

라고 할 때, (a-b) 는 하루에 이동하는 거리라고 할 수 있다.

하지만, 이것만으로 식을 구성하면 안된다.

 

왜냐하면, 낮에 a만큼 이동하면서, v에 도달했을 때,

-b를 하면 뒤로 다시 미끄러지기 때문이다.

 

따라서, 나는 식을 다음과 같이 구성했다.

(a-b)*days + a > v

 

이로서, a 만큼 이동하는 것을 고려해주어,

도달하게 되면, 날짜 세는 것이 마감되도록 하였다.

 

days > (v-a)/(a-b) 

로 days를 구한 후,

 

1) days가 정수로 나누어 덜어지게 되면, 

+1

2) 그렇지 않은 경우

+2

를 해서 days가 잘 맞춰지도록 했다.

 

rough draft

 

2) 코드

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class b2869 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();

        String[] numbers = line.split("\\s+");

        int a = Integer.parseInt(numbers[0]);
        int b = Integer.parseInt(numbers[1]);
        int v = Integer.parseInt(numbers[2]);

        int days;
        if ((v-a)%(a-b) == 0){
            days = (v-a)/(a-b)+1;
        }
        else{
            days = (v-a)/(a-b)+2;
        }

        System.out.println(days);
    }
}

 

이번 코드에서 유의 깊게 보고 싶은 부분은, 

 

공백문자를 구분하여 scan하는 방법이다.

Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();

String[] numbers = line.split("\\s+");

 

요런식으로 진행이 됨을 알 수 있다.

728x90

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준 2024/01/16] 1929번  (0) 2024.01.16
[백준 2024/01/16] 10250번  (0) 2024.01.16
[백준 2024/01/15] 4948번  (0) 2024.01.15
[백준 2024/01/15] 2839번  (0) 2024.01.15
[백준 2024/01/15] 2675번  (1) 2024.01.15