구글 입사문제 중에서
1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
(※(注記) 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
여러 알고리즘이 존재할테고, 답도 여러가지인데...구글이 원했던, 혹은 가장 점수를 많이 줬던 정답은 뭘지 매우 궁금?궁금?
-
예강효빠,
2017年05月24日 01:30
M
D
경우의 수로 풀면 3번의 반복만으로 풀수 있어요 ^^
-
최재학,
2019年08月07日 11:20
M
D
457개의 풀이가 있습니다.
1 / 46 Page
파이썬 2.7 입니다.
print str(range(1,10001)).count('8')
죄송한데 파이썬 초보라 이해가 잘 안됩니다. 위의 코드를 넣고 돌려봤는데(print에 괄호 넣고) 0 이 나오더라구요(python 3.3). 제가 뭔가 잘못한걸까요? str(range(1,10001)) 넣으면 '1234567891011....'이 나오나요?
-
에밀로,
2014年02月19日 05:18
M
D
파이썬 2.7.6 잘 됩니다. 파이썬 2.7.6에서 str(range(1,10001))하시면 "[1,2,3,...,10000]" 됩니다
-
Lee SunYeop,
2014年02月19日 05:24
M
D
답변 감사합니다. 그럼 버전의 문제인듯한데, 3.3버전에서 str(range(1,10001))을 하려면 어떻게 해야할까요?
-
에밀로,
2014年02月19日 05:35
M
D
+8
답을 찾았습니다. print(str(list(range(1,10001))).count('8')) 로 하면 되는군요.
-
에밀로,
2014年02月19日 09:20
M
D
오 저는 숫자 하나 하나의 '8'의 갯수를 찾고 그 것의 갯수를 더하는 방법을 택했는데, list에 넣고 한번에 세는 것이 더 간단하고 좋은 것 같네요~ 간결하고 멋져요!!
-
lkungs,
2016年08月16日 17:41
M
D
파이썬 3.5로 풀었습니다.
print(str(list(range(1, 10001))).count('8'))
print ''.join(str(x) for x in range(1, 10001)).count('8')
Python(2.7.9)으로 작성하였습니다.
결과는 4,000으로 확인되었습니다.
int 값을 String으로 변환하여 8을 찾아야겠다고 생각했는데, 길가의풀님도 그렇게 하셨네요!
파이썬 초보인데 길가의풀님 코드의 count('8')을 보고 저도 적용해보았습니다.
뭔가 find() 메소드가 있을거라 생각했었습니다 ^^;
>>> str(list(range(1,10001))).count('8')
str과 list의 순서가 바뀌어야 하지 않을까요?
-
최정진,
2016年12月23日 10:15
M
D
순서보다는 range(1,10001) 가 list type 이라서 안써도 되네요.
>>> str(range(1,10001)).count('8')
Counter 써서 해봤습니다.
from collections import Counter
Counter(str(range(1,10001)))['8']
-
전 수현,
2016年12月26日 22:08
M
D
print(sum([str(num1).count('8') for num1 in range(1,10000)]))
print(str(list(range(1, 10001))).count('8'))
print(str(list(range(1, 10001))).count('8'))
result = 0
for i in range(1, 10000):
a = list(str(i))
for m in a:
if "8" in m:
result += 1
print(result)
# List comprehension 이용
nums = [int(a) for x in range(1,10001) for a in str(x)]
count = sum(1 for n in nums if n == 8)
print(count)
Python 으론 이렇게 단순한데요. 근데 이렇게 간단한 답을 원하는게 아니라 어떻게 풀어야 하는지 방식을 설명해야 될것 같습니다.
list=""
for i in range(1,10000): list = list + str(i)
print list.count('8')
풀이 작성
※(注記) 풀이작성 안내
- 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
- 마크다운 문법으로 본문을 작성 해 주세요.
- 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
- 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
풀이 작성은 로그인이 필요합니다.