코딩도장

구글 입사문제 중에서

1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?

8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
((注記) 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)

2014年02月14日 01:03

pahkey

(追記) (追記ここまで)
댓글 작성은 로그인이 필요합니다.
여러 알고리즘이 존재할테고, 답도 여러가지인데...구글이 원했던, 혹은 가장 점수를 많이 줬던 정답은 뭘지 매우 궁금?궁금? - 예강효빠, 2017年05月24日 01:30 M D
경우의 수로 풀면 3번의 반복만으로 풀수 있어요 ^^ - 최재학, 2019年08月07日 11:20 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

877개의 풀이가 있습니다. 2 / 88 Page

print ''.join(str(x) for x in range(1, 10001)).count('8')

Python(2.7.9)으로 작성하였습니다.
결과는 4,000으로 확인되었습니다.

2015年11月18日 16:59

如 月華

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

자바스크립트 입니다.

function getEights() {
 var count = 0;
 for(i = 1; i <= 10000; i++) {
 count += ((i + "").split(/8/g).length - 1);
 }
 console.log(count);
}

2014年02月15日 02:04

Park Jung Wook

댓글 작성은 로그인이 필요합니다.
8로 split하는 재밌는 방법이네요 ^^ - pahkey, 2014年02月15日 10:31 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
<?php
echo substr_count(join('', range(1,10000)), 8);
?>

2014年02月19日 09:09

송 영호

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

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

import java.util.stream.IntStream;
public static void main(String[] args) {
 System.out.println(String.format(">> %d", foo()));
}
public static long foo(){
//return IntStream.range(1, 10000).map(x -> String.valueOf(x).replaceAll("[0-79]", "").length()).sum();
 return IntStream.rangeClosed(1, max)
 .map(x -> (int)(String.valueOf(x).chars().filter(ch -> ch == '8').count()))
 .sum();
}

java 8 버전입니다.

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
 Sub Main()
 Console.WriteLine("Result: " & (From c As Char In String.Join("", Enumerable.Range(1, 10000)).ToArray Where c = "8"c Select c).Count)
 Console.ReadLine()
 End Sub

Linq를 이용했습니다.

정답: 4000

2015年06月12日 15:13

Steal

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
Stopwatch sw1 = Stopwatch.StartNew();
int cnt = Enumerable.Range(1, 10000).Sum(k => k.ToString().Count(z => z == '8'));
sw1.Stop();
Console.WriteLine($"Elapsed MillSecond : {sw1.ElapsedMilliseconds}, Value : {cnt}");

Elapsed MillSecond : 4, Value : 4000

2016年11月23日 04:30

lee jaekyoon

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
-- ORACLE SQL
SELECT SUM(CNT)
 FROM (SELECT LENGTH(TO_CHAR(LEVEL)) - NVL(LENGTH(REPLACE(TO_CHAR(LEVEL),'8','')),0) CNT
 FROM DUAL
 CONNECT BY LEVEL <= 10000)
;

2017年02月17日 11:20

진평수

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
'''
1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
((注記) 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
'''
# for문으로 하나하나 확인
count = 0
for i in range(10000): # [0...9999]
 for j in str(i):
 if j == '8':
 count += 1
print(count)
# 또는
print(str(list(range(10000))).count('8'))
# 8*** -> 000~ 999 -> 1000개
# *8** -> 000~ 999 -> 1000개
# **8* -> 000~ 999 -> 1000개
# ***8 -> 000~ 999 -> 1000개
# 4000개가 답이다.

2018年06月11日 14:14

재즐보프

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

2018年09月01日 15:14

오왕씨

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

풀이 작성

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

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


언어별 풀이 현황
전 체 x 877
기 타 x 137
python x 457
java x 134
cpp x 59
ruby x 7
javascript x 27
php x 8
cs x 18
lisp x 2
scala x 7
clojure x 1
objectivec x 5
perl x 2
go x 4
haskell x 3
r x 4
matlab x 2
코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

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