- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Link
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[M2S] 2009년 01월 30일 금요일 C언어 DailyQuiz 12 ( 1의 횟수 ) 본문
★─M2S Study/☆─09.01 Daily
[M2S] 2009년 01월 30일 금요일 C언어 DailyQuiz 12 ( 1의 횟수 )
드럼치는한동이 2009. 1. 29. 14:561의 횟수
양수 n에 대해서 1과 n 사이에 1이 나오는 횟수를 나타내는 함수를 f(n)이라고 한다.
예를 들어 f(13)=6이다. f(n)=n이 되는 첫번째 양수는 1이다.
ex) 13 > 1, 10, 11, 12, 13
두번째 양수는 무엇인가?
출처 : http://kaisyu.blogspot.com/2007/02/google_14.html
날짜를 보니 작년 문제인듯 싶다. 1의 횟수
1에서 부터 n까지 모든 숫자를 각 자릿수 숫자를 한자리 숫자들의 리스트로 나누어서 1의 갯수를 구한뒤 이를 모두 합치면 간단히 풀 수 있다.
간단히 풀수 있는 문제 이지만 풀다보니 n의 복잡도가 아닌 상수 복잡도로 0에서 양의 정수 n까지의 1의 갯수를 발견할 수 있음을 깨달았다.
알고리즘을 간단히 설명하자면 각 자릿수의 수만 고려해 본다면 자연수 의 특성상 일정한 규칙으로 정렬 되는데 예를 들어 일의 자리의 수만 나열해 보면 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 ...
이런식으로 나열된다. 잘보면 1이 10의 주기로 나오는 것을 알 수 있다.
십의 자리도 마찬가지로 0 0 0... 0 1 1 1 .. 1 이런식으로 한 숫자당 10 번 씩 반복하며 0 ~ 9 로 반복됨을 알 수 있다. 이 규칙은 백의 자리 이상에서도 성립한다. 단지 각 숫자의 반복이 자릿수가 늘어날수록 1 , 10 , 100 등 10의 배수로 늘어날 뿐이다.
이러한 규칙을 이용하면 1에서 부터 모두 구하지 않더라도 1의 갯수를 개산할 수 있는데
아래는 이를 얼랭으로 풀이한 결과이다.
양수 n에 대해서 1과 n 사이에 1이 나오는 횟수를 나타내는 함수를 f(n)이라고 한다.
예를 들어 f(13)=6이다. f(n)=n이 되는 첫번째 양수는 1이다.
ex) 13 > 1, 10, 11, 12, 13
두번째 양수는 무엇인가?
출처 : http://kaisyu.blogspot.com/2007/02/google_14.html
날짜를 보니 작년 문제인듯 싶다. 1의 횟수
1에서 부터 n까지 모든 숫자를 각 자릿수 숫자를 한자리 숫자들의 리스트로 나누어서 1의 갯수를 구한뒤 이를 모두 합치면 간단히 풀 수 있다.
간단히 풀수 있는 문제 이지만 풀다보니 n의 복잡도가 아닌 상수 복잡도로 0에서 양의 정수 n까지의 1의 갯수를 발견할 수 있음을 깨달았다.
알고리즘을 간단히 설명하자면 각 자릿수의 수만 고려해 본다면 자연수 의 특성상 일정한 규칙으로 정렬 되는데 예를 들어 일의 자리의 수만 나열해 보면 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 ...
이런식으로 나열된다. 잘보면 1이 10의 주기로 나오는 것을 알 수 있다.
십의 자리도 마찬가지로 0 0 0... 0 1 1 1 .. 1 이런식으로 한 숫자당 10 번 씩 반복하며 0 ~ 9 로 반복됨을 알 수 있다. 이 규칙은 백의 자리 이상에서도 성립한다. 단지 각 숫자의 반복이 자릿수가 늘어날수록 1 , 10 , 100 등 10의 배수로 늘어날 뿐이다.
이러한 규칙을 이용하면 1에서 부터 모두 구하지 않더라도 1의 갯수를 개산할 수 있는데
아래는 이를 얼랭으로 풀이한 결과이다.
ps. Max 값은 1,000,000 으로 잡는다.
N까지의 1의 숫자를 매번 헤아리는게 아닌 N까지의 숫자를 이용해서 1이 몇회 나오는데
자릿수만큼의 루프를 통해서 찾아내는 방법으로 연산 횟수를 크게 줄이는 게 광건이다.
기한 : 2009년 2월 2일 월요일 PM 02:00 까지.
제출 : rockdrumy@nate.com or 네이트온.
제출방법 : 워드문서로 레포트 형식과 동일하게 소스와 실행화면 스샷과 함께 작성하고,
Word 파일과 c 파일 1개로 압축하여 제출.
궁금한 점은 무조건 저한테만 문의 바람. 웹사이트 & 네이버 지식검색 참조 금물.
'★─M2S Study > ☆─09.01 Daily' 카테고리의 다른 글
[M2S] 2009년 02월 03일 화요일 C언어 DailyQuiz 14 ( 개미수열 ) (0) | 2009.02.02 |
---|---|
[M2S] 2009년 02월 02일 월요일 C언어 DailyQuiz 13 ( Date Memory ) (1) | 2009.01.30 |
[M2S] 2009년 01월 29일 목요일 C언어 DailyQuiz 11 ( LC-Display ) (0) | 2009.01.28 |
[M2S] 2009년 01월 28일 수요일 C언어 DailyQuiz 10 ( Self-Number ) (0) | 2009.01.28 |
[M2S] 2009년 01월 23일 금요일 C언어 DailyQuiz 09 ( N 사이클 ) (0) | 2009.01.23 |
Comments