코딩도장

숫자 세기 알고리즘

0부터 9999까지 8을 포함하지 않는 수는 총 몇개일까?

8, 108, 888, 9998 등은 8을 포함하고 있는 수입니다. 111, 299, 4 등과 같은 수는 8을 포함하지 않는 수 입니다.

2022年07月11日 21:15

Tae Joo

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

1개의 풀이가 있습니다.

  1. 우선 해당 문제를 수학의 Modular 연산을 이해하는 것에 대한 출제 의도로 파악했습니다.
  2. 굳이 8이 아니더라도 1~9까지의 수가 검출되는 결과는 동일합니다.
  3. 3, 6, 9 게임처럼 해당 숫자가 있는 것을 파악 각 자리수에 8이 있는 숫자를 찾아야 합니다.
  4. 예를 들면 8은 (8 % 10) 으로 찾아지고, 80은 (80 % 100)으로 찾아집니다. 88은 (8%10)으로 먼저 찾아지겠네요
  5. 8 % 10 = 8, 80 %100 = 80, 800 % 1000 = 800....
#include <stdio.h>
#include <math.h>
// 숫자를 찾는 함수 입니다. 
int count_number(int input_number, int start_n, int end_n)
{
 // 8을 찾는 총 count입니다.
 int number_find_count = 0;
 // start_n + end_n의 개수입니다. 0부터 9999이니 총 10000 입니다.
 int total_count = end_n - start_n + 1;
 int result_count = 0;
 // 찾는 숫자는 1~9로 fix했습니다.
 if((input_number < 1 ) || (input_number > 10))
 {
 printf("Find Number range is from 1 to 9 \r\n");
 return -1;
 }
 // 0~9999의 숫자를 찾습니다.
 for(int i = start_n; i< end_n; i++)
 {
 for(int j = 0; j< 4; j++)
 {
 // pow라는 함수는 10지수승입니다. 10의 0은 1이고 10의 1승은 10, 2승은 100입니다.
 // 10, 100, 1000, 10000으로 나누면서 8이 발견하면 count를 증가하고 loop를 빠져나갑니다.
 int mod_value = pow(10, (j+1));
 int remainder = input_number * pow(10,j);
 if((i%mod_value)==(remainder))
 {
 number_find_count++;
 printf("find value (%d) % (%d) == %(%d) \r\n", i , mod_value, remainder);
 break;
 }
 }
 }
 printf("A total %d of number(%d) from %d to %d were detected.\r\n", number_find_count ,input_number, start_n, end_n);
 // 8을 찾은 결과에서 숫자 전체 개수를 빼면 의도한 결과가 나옵니다.
 result_count = total_count - number_find_count;
 printf("There are %d numbers excluding %d. \r\n", result_count, input_number);
 return 0;
}
int main(int argc, char *argv[])
{
 count_number(8, 0, 9999);
 return 0; 
}
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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


언어별 풀이 현황
전 체 x 60
python x 43
기 타 x 12
cpp x 1
java x 3
cs x 1
코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

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