갓생살기프로젝트

[백준/BOJ/C++] 2965번 캥거루 세마리 - 구현 본문

차근차근 알고리즘/etc.

[백준/BOJ/C++] 2965번 캥거루 세마리 - 구현

Heeyeon.dev 2021. 1. 26. 22:01
728x90

 

2965번: 캥거루 세마리

첫째 줄에 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100)

www.acmicpc.net

1. 문제

캥거루 세 마리가 사막에서 놀고 있다. 사막에는 수직선이 하나 있고, 캥거루는 서로 다른 한 좌표 위에 있다.

한 번 움직일 때, 바깥쪽의 두 캥거루 중 한 마리가 다른 두 캥거루 사이의 정수 좌표로 점프한다. 한 좌표 위에 있는 캥거루가 두 마리 이상일 수는 없다.

캥거루는 최대 몇 번 움직일 수 있을까?


2. 입력

첫째 줄에 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100)


3. 출력

캥거루가 최대 몇 번 움직일 수 있는지 출력한다.


4. 풀이

캥거루가 최대한 많이 움직이기 위해서는 각 캥거루 사이의 거리가 많이 남아있는 쪽으로 나머지 한 캥거루가 움직여야한다. 그리고 그 캥거루가 움직일때 각 캥거루 바로 옆 좌표로 움직여야지만 거리가 많이 확보되어서 최대한으로 움직일 수 있다.

예를 들어, 캥거루의 초기 위치가 1 3 7이라고 할 때, 밑에 표와 같이 움직였을때 최대값 3이 나온다.

  1 2 3 4 5 6 7
처음 위치 A   B       C
1번 움직임     B A     C
2번       A B   C
3번         B A C

이를 간단하게 표현하면 아래 코드의 식과 같다.


5. 소스코드

#include <iostream>
using namespace std;
int main(){
    int A, B, C;
    cin>>A>>B>>C;
    int result = 0;
	
    //B와 A 사이의 거리가 C와 B사이의 거리보다 크거나 같을 때
    if(B - A >= C - B){
        C = B - 1;
        result = C - A;
    }
    //B와 C 사이의 거리가 B와 A사이의 거리보다 크거나 같을 때
    if(C - B >= B - A){
        A = B + 1;
        result = C - A;
    }
    cout<<result;
}


728x90