0부터 9999까지 8을 포함하지 않는 수는 총 몇개일까?
8, 108, 888, 9998 등은 8을 포함하고 있는 수입니다. 111, 299, 4 등과 같은 수는 8을 포함하지 않는 수 입니다.
# 1개의 8이 있을 경우: 예) XXX8(* X는 8을 제외한 0 ~ 9까지의 숫자가 가능. 결국 9가지 방법이 가능)
# 4개의 자리에 8을 1개 할당하는 경우의 수는 조합으로 구함: C(4, 1) = 4!/1!(4-1)! = 4
# 경우의 수 x 9 x 9 x 9: 4 x 9 x 9 x 9 = 2,916
# 2개의 8이 있을 경우: 예) XX88(* X는 8을 제외한 0 ~ 9까지의 숫자가 가능. 결국 9가지 방법이 가능)
# 4개의 자리에 8을 2개 할당하는 경우의 수는 조합으로 구함: C(4, 2) = 4!/2!(4-2)! = 6
# 경우의 수 x 9 x 9: 6 x 9 x 9 = 483
# 3개의 8이 있을 경우: 예) X888(* X는 8을 제외한 0 ~ 9까지의 숫자가 가능. 결국 9가지 방법이 가능)
# 4개의 자리에 8을 3개 할당하는 경우의 수는 조합으로 구함: C(4, 3) = 4!/3!(4-3)! = 4
# 경우의 수 x 9: 4 x 9 = 36
# 4개의 8이 있을 경우: 예) 8888(* X는 8을 제외한 0 ~ 9까지의 숫자가 가능. 결국 9가지 방법이 가능)
# 4개의 자리에 8을 4개 할당하는 경우의 수는 조합으로 구함: C(4, 4) = 4!/4!(4-4)! = 1
# 경우의 수 x 1: 1 x 1 = 1
# 0 ~ 9999: 총 10,000개 중에 8이 1개 이상 있는 경우는 2,916 +たす 483 +たす 36 +たす 1 =わ 3,439
# 0 ~ 9999: 총 10,000개 중에 8이 포함되지 않는 경우는 10,000 - 3,439 = 6561
import math
total = 0
for n in range(1, 5): # n: 8의 개수, 8이 없는 자리수: 4 - n
cnt = math.comb(4, n)
sum = cnt * 9**(4-n)
total += sum
print("total = ", total)
print("total_without_8 = ", 10000 - total)
기존 파이썬 string기초만 이용하면
def do_not_provide_8_number(input_n):
"""
input_n이 숫자고 그때 input_str이 8을 포함하는지 하지 않는지 판단한다.
8을 포함하면 true를, 포함하지 않으면 false를 리턴한다.
"""
flag = False
input_str = str(input_n)
for i in range(len(input_str)):
if input_str[i]=="8":
flag = True
return flag
count=0
for j in range(9999):
flag = do_not_provide_8_number(j)
count+=flag
print(count)
count = 0 for i in range (10000): i = str(i) if not "8" in i: count += 1 print(count)
2023年12月28日 22:01
a = []
for i in range(0,10000):
if '8' not in str(i):
a.append(i)
print(len(a))
2023年10月20日 22:02
cnt = 0
nStr = '8'
for i in range(10000):
if nStr in str(i):
cnt += 1
print(10000-cnt)
2023年07月18日 06:34
풀이 작성