코딩도장

구글 입사문제 중에서

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

59개의 풀이가 있습니다. 1 / 6 Page

int main()
{
 int i,j,n,m;
 int sum;
 sum = 0;
 for (i=0; i<10; i++){
 for(j=0; j<10; j++){
 for (n=0; n<10; n++){
 for(m=0; m<10; m++){
 if( m == 8 ){sum = sum+1;}
 if( n == 8){sum = sum+1;}
 if ( j == 8){sum = sum+1;}
 if( i == 8 ){sum = sum+1;}
 }
 }
 }
 }
 printf("1~10000까지 8을 가진 숫자의 갯수는 %d 이다.\n",sum);
}

이제 C 공부하기 시작한 초보입니다. 배운 범위에서는 이렇게 하면 되네요.

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

C 코드입니다.

#include <stdio.h>
int main()
{
 int i;
 int count[4] = {1};
 int v = 9;
 int sum = 1;
 for (i = 1; i < 4; i++) {
 count[i] = v + count[i - 1] * 10;
 v *= 10;
 sum += count[i];
 }
 printf("count of 8 from 1 to 10,000: %d\n", sum);
 return 0;
}

2014年02月14日 23:22

이벽산

댓글 작성은 로그인이 필요합니다.
i자리의 수들 중 8의 개수를 알면 i+1자리의 수들 중 8의 개수를 알 수 있습니다. - 이벽산, 2014年02月14日 23:25 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

루푸 없이 입력한 숫자까지 갯 수 구하는 프로그램 입니다.


#include "stdafx.h"
#include <math.h>
int Get8Count(int nValue)
{
 int nCount = 0;
 int nDigit = log10((double)nValue);
 if(nDigit ==0 || nValue ==0)
 return nValue >=8;
 int nLast = ((int)(nValue/pow(10.,nDigit))) ;
 nCount += nDigit * pow(10.,(nDigit-1)) *nLast;
 if(nLast == 8)
 nCount++;
 return nCount+Get8Count(nValue%(int)(pow(10.,nDigit)));
}
int _tmain(int argc, _TCHAR* argv[])
{
 while(1)
 {
 printf("?");
 int nMax = 0;
 int nCount = 0;
 scanf("%d",&nMax);
 printf("\n%d\n",Get8Count(nMax));
 }
 return 0;
}

2014年02月21日 14:59

김 영남

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
int count(int n)
{
 int temp;
 int i;
 int count = 0;
 for(i = 0; i <= n; i++)
 {
 temp = i;
 while(temp > 0)
 {
 if(temp % 10 == 8) count++;
 temp /= 10;
 }
 }
 return count;
}
int main(void )
{
 printf("%d\n", count(10000));
 return 0;
}

2014年07月06日 20:02

고 상우

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

c입니다. 숫자 8을 어떻게 세지 고민하다가 char형으로 바꾼다음에 세는 방법을 썼는데... 다른 분들의 풀이를 보고 나서야 %를 사용하면 된다는 사실을 깨달았네요ᅮᅮ

#include <stdio.h>
#include <stdlib.h>
#define MAX 10000
int main()
{
 int number=0, i, j=0, k;
 int count=0;
 char buffer[10]={0,};
 for(i=0;i<MAX;i++)
 {
 number++;
 itoa(number,buffer,10);
 while(buffer[j])
 {
 if(buffer[j]=='8')
 {count++;}
 j++;
 }
 for(k=0;buffer[k];k++)
 {
 buffer[k]='0円';
 }
 j=0;
 }
 printf("1부터 %d까지 8의 개수는 %d개입니다.\n", MAX, count);
 return 0;
}

2014年08月18日 21:59

IM HUI-AE

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <iostream>
using namespace std;
void main() {
 int num = 10000;
 int count = 0;
 for (num; num != 0; num--) {
 int i = num;
 while (i >= 8) {
 if (i % 10 == 8)
 count++;
 i /= 10;
 }
 }
 cout << count << endl;
}

2014年12月06日 09:21

I ZG

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
int main(void)
{
 int i , j , k , l;
 int n=0;
 for( i = 0 ; i <=9 ; i++)
 {
 for( j = 0; j <= 9 ; j++)
 {
 for( k = 0 ; k <= 9 ; k++)
 {
 for( l = 0 ; l <= 9 ; l++)
 {
 if( i == 8 )
 n++;
 if(j==8)
 n++;
 if(k==8)
 n++;
 if(l==8)
 n++;
 }
 }
 }
 }
 printf("%d\n",n);
 return 0;
}

다른 분들 대단하시네요.. 얼릉 C를 끝내고 다른 언어 공부해야할듯

2015年04月15日 13:35

김 성환

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <iostream>
using namespace std;
int main(){
 int count = 0;
 int bcd[4] = { 0 };
 int num;
 for (int i = 1; i < 10000; i++)
 {
 num = i;
 for (int j = 3; j >= 0; j--)
 {
 bcd[j] = num % 10;
 num /= 10;
 }
 if (bcd[0] == 8)
 count++;
 if (bcd[1] == 8)
 count++;
 if (bcd[2] == 8)
 count++;
 if (bcd[3] == 8)
 count++;
 }
 cout << "8이 나온 횟수 : " << count << endl;
 return 0;
}

이렇게 짜봤습니다... 어떤가요?? 제가 생각한 방법은 예를들어 124라는 숫자를 bcd코드로 변환해서 0, 1, 2, 4로 만듭니다 그리고 각 자리의 숫자가 8이면 count를 하나 증가시키는 방법입니다

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
{```{.cpp}
#include<iostream>
using namespace std;
int eight(int n);
int count;
int main() {
 for(int i = 0; i < 10001; i++) { 
 eight(i); 
 }
 cout << "8의 개수: " << count << endl;
 return 0;
}
int eight(int n) 
{ 
 if(n%10 == 8) 
 count++; 
 if(n > 10) 
 eight(n/10);
 return count; 
} ```
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
#include <Windows.h>
int main()
{
 int sum=0;
 for(int i=1;i<10001;i++)
 {
 for(int j=i;j>0;j/=10)
 {
 if(j%10 == 8)
 {
 sum++;
 }
 }
 }
 printf("%d",sum);
 system("pause");
 return TRUE;
}

2015年06月17日 11:38

심 기용

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

풀이 작성

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

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