728x90

백준 1527 - 금민수의 개수

시간 제한 2초, 메모리 제한 128MB

# 조건

  • 은민이는 4와 7을 좋아하고, 나머지 숫자는 싫어한다.
  • 금민수는 어떤 수가 4와 7로만 이루어진 수를 말한다.
  • A와 B가 주어졌을 때, A보다 크거나 같고, B보다 작거나 같은 자연수 중에 금민수인 것의 개수를 출력하는 프로그램을 작성하시오.

입력

  • 첫째 줄에 A와 B가 주어진다.
  • A는 1보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다.
  • B는 A보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다.

출력

  • 첫째 줄에 A보다 크거나 같고, B보다 작거나 같은 자연수 중에 금민수인 것의 개수를 출력한다.

# 접근 방법

  • 최대 범위가 10억이기 때문에 하나하나 확인할 수는 없다.
  • 따라서, 중복 순열을 이용하여 풀어준다.
  • 4와 7만을 이용하여 중복 순열을 만들어 줄건데, 이 때 product 함수의 인자 repeat에는 a의 길이 ~ b의 길이 + 1 사이의 값을 넣어 줄 것이다.
    • 즉 3 ~ 9 사이를 탐색해야 된다면 range(1, 2)를 범위로 넣어준다.
  • 생성된 수가 범위 내에 존재한다면 cnt +1을 해준다.

import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from itertools import product

a, b = map(int, input().split())
x, y = len(str(a)), len(str(b))
cnt = 0
for i in range(x, y + 1) :
    pro = list(product([4, 7], repeat = i))
    for li in pro :
li = int(''.join(map(str, li)))
if a <= li <= b :
    cnt += 1
    print(cnt)
728x90