코딩도장

구글 입사문제 중에서

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

134개의 풀이가 있습니다. 1 / 14 Page

JAVA

public class CountingEight {
 public static void main(String[] args) {
 for (int i=0; i<=10000; i++){
 searchEight(i);
 }
 System.out.println("1에서 10,000 사이에 존재하는 8의 개수는? "+count);
 }
 private static int count = 0;
 public static void searchEight(int num){
 if (num%10==8) count++; 
 if (num>10) searchEight(num/10);
 }
}

1에서 10,000 사이에 존재하는 8의 개수는? 4000

2015年02月24日 18:33

그린구름

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

파이썬은 한줄로 가능하군요!!! @_@ 제 능력으로는 이렇게 밖에.... 하아~~

int count = 0;
for(int i = 1; i < 10001; i++)
{
 for(int j = i; j > 0; j /= 10)
 {
 if(j % 10 == 8)
 {
 count++;
 }
 }
}

2014年02月14日 16:10

Nemorino

댓글 작성은 로그인이 필요합니다.
멋진 방법이네요. 감탄했습니다. ^^ - pahkey, 2014年02月14日 16:29 M D
+1 아래 파이썬 해법은 알고보면 무척 단순합니다. 숫자 리스트를 모두 문자열로 변환해서 합친다음에 그 합쳐진 문자열에서 8이라는 숫자가 몇개인지 조사하는 방법입니다. - pahkey, 2014年02月14日 16:44 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Java로 풀어보았습니다.

각 자리수에 대해 8인지 검사하고 8이면 cnt값을 하나씩 증가시켜서 8의 개수를 구하는 코드입니다.

class Count8 {
 public static void main(String[] args) {
 int cnt = 0;
 for(int i = 1; i < 10000; i++ ) {
 if( i % 10 == 8 ) cnt++;
 if( (i / 10) % 10 == 8 ) cnt++;
 if( (i / 100) % 10 == 8 ) cnt++;
 if( (i / 1000) % 10 == 8 ) cnt++;
 }
 System.out.println("result : " + cnt);
 }
}
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

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 버전입니다.

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
String temp = "";
int count = 0;
for(int i = 1; i < 10001; i++)
{
 temp = temp.concat(String.valueOf(i));
}
for(int j = 0; j < temp.length(); j++)
{
 if(temp.charAt(j) == '8')
 {
 count++;
 }
}

2014年02月14日 16:58

Nemorino

댓글 작성은 로그인이 필요합니다.
+1 길가의풀님 방법으로 자바에 적용해봤습니다. 길가의풀님 감사합니다. ^^ - Nemorino, 2014年02月14日 17:01 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
 int count = 0;
 for (int i = 1; i <= 10000; i++) {
 if (i % 10 == 8)
 count++;
 if ((i / 10) % 10 == 8)
 count++;
 if ((i / 100) % 10 == 8)
 count++;
 if (i / 1000 == 8)
 count++;
 }
 System.out.println(count);
다른분들 코드 대단하네요 ..ᄃᄃ

2014年08月20日 16:36

박 대성

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

// java

// n = 10, 100, 1000 ...
// System.out.println(google(10000)); 
public static int google(int n) {
 return n==0 ? 0 : 10 * google(n/10) + n/10;
}
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

문자열로 한자리씩 끊어 처리하는 방법이랑 각 자리수로 계산 하는 방식 2가지로 해봤습니다. JAVA 코드입니다~

package my_test;
public class T {
 public static void main(String[] args) {
 int su=10000; 
 System.out.println("자리수 계산 방식:"+eight_num(su));
 System.out.println("문자열 계산 방식:"+eight_str(su));
 }
 /**
 * 자리수 계산 방식
 */
 public static int eight_num(int num){
 int result=0;
 for(int i=0;i<=num;i++){ 
 for(int j=i;0<j;){
 if(j%10==8){
 result++;
 }
 j/=10;
 }
 }
 return result;
 }
 /**
 * 문자열 계산 방식
 */
 public static int eight_str(int num){
 int result=0;
 for(int i=1;i<=num;i++){
 String temp= String.valueOf(i);
 for(int j=0;j<temp.length();j++){
 if('8' == temp.charAt(j)){
 result++;
 }
 }
 }
 return result;
 } 
}

2014年09月23日 14:19

임시

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

성능을 위해 StringBuilder를 사용했습니다

public class Main {
 public static void main(String[] ar){
 int cnt = 0;
 StringBuilder s = new StringBuilder();
 for(int i = 1; i <= 10000; i++){
 s.append(i);
 }
 for(int i = 0; i < s.length(); i++){
 if(s.charAt(i) == '8')
 cnt++;
 }
 System.out.println(cnt);
 }
}
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
package Coding;
public class coding2 {
 public static void main(String args[]){
 int ard=0; // 나누어줄 값
 int res=0; // 계산의 결과
 int cor=0; // 결과값, 갯수
 int incr=88; // 구해야할 값의 한계
 for(int j=0;j<=incr;j++){
 ard = j;
 for(int i=0; i<=ard;i++){
 res = ard % 10;
 ard /= 10;
 if(res == 8){
 ++cor;
 }
 res = 0;
 }
 System.out.println(cor);
 }
 }
}

2014年10月08日 11:08

이성환

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

풀이 작성

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

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(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 によって変換されたページ (->オリジナル) /