코딩도장

구글 입사문제 중에서

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개의 풀이가 있습니다. 8 / 88 Page

using System;
class Program
{
 static void Main(string[] args)
 {
 int numberEightCount = 0;
 for (int i = 1; i <= 10000; i++)
 {
 char[] digits = i.ToString().ToCharArray();
 foreach (var aDigit in digits)
 {
 if (aDigit == '8')
 {
 numberEightCount++;
 }
 }
 }
 Console.WriteLine("numberEightCount = " + numberEightCount);
 }
}
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

objective c 풀었습니다. 문자열로 변환이후 각 자리수를 어떻게 구해야 하나 생각하느라 시간이 좀 걸렸네요

- (int) CountNumber:(NSString *)num
{
 self.countNum = 0;
 for(int i = 1; i<=10000; i++)//1~10000까지 숫자를 한번씩 계산합니다
 {
 NSString *temp = [NSString stringWithFormat:@"%d", i];
 //문자열로 전환
 for(int j=0; j < temp.length; j++)//그 전환한 문자열의 자릿수 만큼 반복합니다
 {
 if('8' == [temp characterAtIndex:j])//각 자리수를 체크
 {
 countNum++;
 }
 }
 }
 return countNum;
};
//main
CountNumber *myCountNum = [[CountNumber alloc] init];
 [myCountNum CountNumber:@"8"];
 NSLog(@"%d", myCountNum.countNum);
//결과
CodingDojang[965:303] 4000
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

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

puts ("1".."10000").to_a.join.count("8")

2014年10月05日 05:37

Lim Eun Chong

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

이성환

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

'길가의 풀'님의 풀이를 파이썬으로 더 풀어봤습니다. 더 길어서 의미는 없습니다만ᄒ

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

루비

a = Array(1..10000).to_s
a.count("8")

2014年10月29日 14:23

Cha Semo

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
sum([str(x).count('8') for x in range(10001)])
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class CountEightMain {
 public static void main(String[] args) {
 // TODO Auto-generated method stub
 String s = "";
 char cArray[] = null;
 long cnt = 0;
 for(int i = 1; i <= 10000; i++) {
 s = Integer.toString(i);
 cArray = s.toCharArray();
 for (int j = 0; j < cArray.length; j++) {
 if (cArray[j] == '8') {
 cnt = cnt + 1;
 }
 }
 }
 System.out.println(cnt);
 }
}
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

scala로 풀었습니다.

(1 to 10000).map(_.toString.count(_ == '8')).sum
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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