작성일 :

문제 링크

29736번 - 브실이와 친구가 되고 싶어 🤸‍♀️

설명

점수가 a 이상 b 이하인 친구 후보 중, 브실이의 점수 k와의 차이가 x 이하인 사람 수를 구하는 문제입니다.

조건을 만족하는 사람이 없으면 IMPOSSIBLE을 출력합니다.


접근법

친구가 될 수 있는 점수 범위는 k - x 이상 k + x 이하입니다.

이 범위와 a 이상 b 이하의 교집합 길이가 답입니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;

class Program {
  static void Main() {
    var ab = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
    var kx = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
    
    var a = ab[0];
    var b = ab[1];
    var k = kx[0];
    var x = kx[1];
    var lo = Math.Max(a, k - x);
    var hi = Math.Min(b, k + x);
    var cnt = hi - lo + 1;

    if (cnt > 0) Console.WriteLine(cnt);
    else Console.WriteLine("IMPOSSIBLE");
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int a, b, k, x; cin >> a >> b >> k >> x;

  int lo = max(a, k - x);
  int hi = min(b, k + x);
  int cnt = hi - lo + 1;

  if (cnt > 0) cout << cnt << "\n";
  else cout << "IMPOSSIBLE\n";

  return 0;
}

Tags: 29736, arithmetic, BOJ, C#, C++, 구현, 백준, 수학, 알고리즘

Categories: ,