컴굥일지

[BOJ/백준 11564][C++] 점프왕 최준민 본문

알고리즘/코테 문제

[BOJ/백준 11564][C++] 점프왕 최준민

gyong 2023. 8. 3. 16:27
반응형

문제

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

백준 11564

 

문제 내용

좌표축이 -10^18 ~ 10^18까지 주어진다.

점프력 k와 초콜릿이 놓여있는 시작 위치 a, 끝 위치 b를 입력받아 몇 개의 초콜릿을 먹을 수 있는지 출력한다.

점프 횟수에는 제한이 없다.

 

문제 풀이

일단 좌표의 범위가 int 범위를 넘어가기 때문에, long long으로 선언한다.

점프력이 k로 고정되어 있고, 점프 횟수에 제한이 없기 때문에, 수학적으로 계산만 하면 된다.

 

0으로 시작하거나 끝나거나, 0을 포함하는 구간의 경우에는 초콜릿이 0번 자리에도 있으니 +1 하는 것을 잊으면 안 된다.

 

0이 포함되지 않고 한쪽으로 치우쳐져 있는 경우는, 음수나 양수나 계산 방법이 똑같다.

편의를 위해 음수일 경우 양수로 바꾸어 계산하는 것이 좋다.

이 경우, 끝지점/k - 시작지점/k 를 하면 되는데, 시작지점이 준민이가 갈 수 있는 곳일 경우 (시작지점%k==0인 경우) 주의가 필요하다. 결과에 +1을 해주어 시작지점에 있는 초콜릿도 먹어야 한다. 

 

코드

#include <iostream>
using namespace std;

int main() {
    long long k, start, end;
    cin >> k >> start >> end;

    long long result;
    if (start == 0 || end == 0 || (start < 0 && end > 0)) { // 0을 포함하는 경우
        result = 1 + abs(start) / k + end / k;
    } else { // 한쪽에 치우친 경우
        start = abs(start);
        end = abs(end);

        if (start > end)
            swap(start, end); // 무조건 end가 더 크게 만들기

        result = end / k - start / k;
        if (start % k == 0) {
            result += 1;
        }
    }

    cout << result;
}

 

반응형
Comments