[백준 2965] 캥거루 세마리 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
세 마리의 캥거루가 최대 몇 번 움직일 수 있는지를 구하는 문제입니다.
수직선 위의 서로 다른 세 좌표에 캥거루가 있고, 매 번 이동에서는 양 끝에 있는 캥거루 중 하나만 선택합니다.
이 때 선택된 캥거루를 다른 두 캥거루 사이의 정수 좌표로만 이동시킬 수 있습니다.
이 조건에서 캥거루가 최대로 이동할 수 있는 횟수를 계산합니다.
접근법
- 세 마리의 위치를 오름차순으로 정렬한 후, 양쪽 간격 중 더 넓은 쪽을 기준으로 점프 횟수를 계산합니다.
- 이는 각 이동에서 항상 가운데 칸을 채우는 방식으로 점프하므로,
더 넓은 간격 쪽에서 더 많은 이동이 가능하기 때문입니다.
- 이는 각 이동에서 항상 가운데 칸을 채우는 방식으로 점프하므로,
- 각 간격에서 가운데 칸을 계속 채워가는 방식이므로,
최댓값은 \(\max(B - A, C - B) - 1\) 이 됩니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Linq;
class Program {
static void Main() {
var cord = Console.ReadLine().Split().Select(int.Parse).ToArray();
Array.Sort(cord);
int leftGap = cord[1] - cord[0];
int rightGap = cord[2] - cord[1];
int ans = Math.Max(leftGap, rightGap) - 1;
Console.WriteLine(ans);
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int cord[3];
for (int i = 0; i < 3; i++)
cin >> cord[i];
int ans = ((cord[1] - cord[0]) > (cord[2] - cord[1]) ?
cord[1] - cord[0] - 1 :
cord[2] - cord[1] - 1);
cout << ans << "\n";
return 0;
}