0%

BOJ 18511

Input

첫째 줄에 N, K의 원소의 개수가 공백을 기준으로 구분되어 자연수로 주어진다. (10 ≤ N ≤ 100,000,000, 1 ≤ K의 원소의 개수 ≤ 3)

둘째 줄에 K의 원소들이 공백을 기준으로 구분되어 주어진다. 각 원소는 1부터 9까지의 자연수다.

단, 항상 K의 원소로만 구성된 N보다 작거나 같은 자연수를 만들 수 있는 경우만 입력으로 주어진다.

1
2
3
4
5
import sys
input = sys.stdin.readline

n, k = map(int, input().split())
s = list(map(int, input().split()))

Brute Force

  • 주어진 범위 내의 수를 하나씩 체크

  • 가장 큰 수를 찾으면 출력하고 프로그램 종료

  • N보다 작거나 같은

    1
    2
    for i in range(n, 0, -1):
    ret = i
  • 주어진 숫자의 모든 자리수가 주어진 k 에 존재해야 함

    1
    2
    3
    4
    while ret > 0:
    if ret % 10 in s:
    ret //= 10
    else: break
  • 조건을 만족시킬 경우 외에는 ret 가 0이 될 수 없음

    1
    2
    3
    if ret == 0:
    print(i)
    exit(0)