작성일 :

문제 링크

11874번 - ZAMKA

설명

간단한 사칙연산 문제입니다.

문제에서 주어진 조건에 따르면 Bear G. 가 탈출하기 위한 조건은 다음과 같습니다.

  1. 각 자릿수의 합이 x 이고, l 보다 크거나 같으면서 d 보다 같거나 작은 정수의 최솟값 n 을 구해야 함
  2. 각 자릿수의 합이 x 이고, l 보다 크거나 같으면서 d 보다 같거나 작은 정수의 최댓값 m 을 구해야 함

ld 의 범위가 작으므로, 완전 탐색을 이용하여도 제한 시간 내에 풀이할 수 있습니다.

따라서, 간단한 완전 탐색을 통하여 nm 을 구한 후 문제의 출력 조건에 맞추어 출력합니다.


Code

[ C# ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
namespace Solution {
  class Program {
    static void Main(string[] args) {

      var l = int.Parse(Console.ReadLine()!);
      var d = int.Parse(Console.ReadLine()!);
      var x = int.Parse(Console.ReadLine()!);

      Func<int, int> SumDigits = (num) => {
        int ret = 0;
        while (true) {
          if (num == 0) break ;

          ret += num % 10;
          num /= 10;
        }

        return ret;
      };

      Func<int, bool> isSameToX = (i) => SumDigits(i) == x;

      for (int i = l; i <= d; i++) {
        if (isSameToX(i)) {
          Console.WriteLine(i); break ;
        }
      }

      for (int i = d; i >= l; i--) {
        if (isSameToX(i)) {
          Console.WriteLine(i); break ;
        }
      }

    }
  }
}



[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>

using namespace std;

int sumDigits(int num) {
  int ret = 0;
  while (true) {
    if (num == 0) break ;

    ret += num % 10;
    num /= 10;
  }

  return ret;
}

bool isSameToX(int num, int x) {
  return sumDigits(num) == x;
}

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

  int l, d, x; cin >> l >> d >> x;

  for (int i = l; i <= d; i++) {
    if (isSameToX(i, x)) {
      cout << i << "\n"; break ;
    }
  }

  for (int i = d; i >= l; i--) {
    if (isSameToX(i, x)) {
      cout << i << "\n"; break;
    }
  }

  return 0;
}