けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 111 B - AtCoder Beginner Contest 111 (6Q, 灰色, 100 点)

探索してしまうのが楽だと思われる。

問題概要

整数値  N が与えられる。

 N 以上の整数のうち、最小のゾロ目の数を答えよ。

制約

  •  100 \le N \le 999

考えたこと

基本的には、次の方針がとれそうだ。


 x = N, N+1, N+2, \dots の順に探索し、最初に  x がゾロ目である瞬間を捉えて、 x を出力する。


ここで、「 x がゾロ目であるかどうか」を判定する方法として、1 つには「 x を文字列に変換して、すべて同じ文字で構成されているかを調べる」という方法がある。

しかし、 100 \le N \le 999 という制約を活用すると、もっと楽ができる。

まず、999 という整数がゾロ目であることに注意しよう。999 がゾロ目なので、答えは 999 以下であることが保証される。さらに  N \ge 100 という制約から、答えは 111 以上であることも保証される。よって、 N 以上の最小のゾロ目の整数は  111, 222, 333, 444, 555, 666, 777, 888, 999 のいずれかとなる。このことを活用して問題が解ける。

逆にゾロ目の数であって、 N 以上である最小の数を求める

上記のことから、方針変換して、次の方法がとれる。


 111, 222, 333, 444, 555, 666, 777, 888, 999 のうち、 N 以上である最小の整数を答える


コード

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;
  int res = 111;
  while (res < N) res += 111;
  cout << res << endl;
}