LoginSignup
0
0

More than 3 years have passed since last update.

はじめに

前回

#43

問題

考えたこと
コンテスト中に解けませんでした。この問題が難しいのはルンルン数を生成するコードを書けないからだと思います。私も書けませんでした。解説によると、10と9で割った余りに着目するようです。$x$を10で割った余りが0の時は一の位は0になり、生成可能なルンルン数は減ります。同様に$x$を9で割った余りが0の時も生成可能なルンルン数は減ります。なぜなら、一の位が0のとき隣合う数の差が1になるようなルンルン数は0、1しかありません。9のときも8、9しかありません。
それぞれどういったルンルン数を生成するかを整理すると、

x != 0 mod(10) → 10x+(x%10)-1
x != 9 mod(10) → 10x+(x%10)+1 

となります。これを実装すると

from collections import deque

k = int(input())

lun = deque([])
for i in range(1,10):
    lun.append(i)

for i in range(k):
    x = lun.popleft()
    if x % 10 != 0:
        lun.append(10*x+(x%10)-1)
    lun.append(10*x+x%10)
    if x % 10 != 9:
        lun.append(10*x+(x%10)+1)
print(x)

データの両端にしかアクセスしないので、dequeを使っています

まとめ

本番に解きたかった。余りを使った計算が苦手なので整数問題周りを練習します。ではまた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0