코딩도장

숫자 세기 알고리즘

0부터 9999까지 8을 포함하지 않는 수는 총 몇개일까?

8, 108, 888, 9998 등은 8을 포함하고 있는 수입니다. 111, 299, 4 등과 같은 수는 8을 포함하지 않는 수 입니다.

2022年07月11日 21:15

Tae Joo

(追記) (追記ここまで)
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

43개의 풀이가 있습니다. 1 / 5 Page

count=0
for i in range(0,10000):
 j = str(i)
 if j.count('8')==0:
 count+=1
print(count)

2025年08月21日 21:41

허거덩

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
eightlist = [x for x in range(10000) if '8' not in str(x)]
print(len(eightlist))

2025年02月25日 14:31

Dasol Lee

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
cnt = 0 #8이 안 들어간 수
#무식하게 0부터 9999까지 반복해보자
for n in range(0,10000) :
 #자릿수 추출
 a = n // 1000
 b = (n % 1000) // 100
 c = (n % 100) // 10
 d = n % 10
 if a != 8 and b != 8 and c != 8 and d != 8:
 cnt += 1
print(cnt)

2024年11月04日 14:56

김빛나

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
# 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)

2024年10月17日 14:59

rgone6

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
print(len(list(lambda x:x for x in range(1,10000) if "8" not in str(x))))

2024年05月26日 12:07

이현민

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

기존 파이썬 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)

2024年05月09日 22:35

오라이트

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
count = 0
for x in range(0,10000):
 if '8' not in str(x):
 count += 1
print(count)

2024年03月23日 17:37

라구리

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

count = 0 for i in range (10000): i = str(i) if not "8" in i: count += 1 print(count)


 
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
a = []
for i in range(0,10000):
 if '8' not in str(i):
 a.append(i)
print(len(a))
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
cnt = 0
nStr = '8'
for i in range(10000):
 if nStr in str(i):
 cnt += 1
print(10000-cnt)
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

(注記) 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
풀이 작성은 로그인이 필요합니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.


언어별 풀이 현황
전 체 x 60
python x 43
기 타 x 12
java x 3
cs x 1
cpp x 1
코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

AltStyle によって変換されたページ (->オリジナル) /