티스토리 뷰

반응형





/*  * invaildCounter.c  *  * Created on: 2014. 10. 8.  * Author: YoWu (uyu423@gmail.com)  * IDE: Eclipse Luna (gcc 4.8.2)  */ #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" int main(void) { int halflife2;     //input value int gordon = 1, freeman = 0; int gordon_freeman = 0; int bbaru;     //temp value int combine = 10;     //combine = combine * 10; int smg1[10];             //save array value by halflife2 int ar2 = 0;     //smg1 counter int i = 0; scanf("%d", &halflife2); bbaru = halflife2; //input halflife2 to smg1 array while (bbaru) { smg1[i] = bbaru % combine; bbaru = bbaru / combine; ar2++; i++; } //calculate for (i = 0; i < ar2; i++) { if (smg1[i] >= 4) { gordon_freeman = gordon_freeman + gordon + (freeman * (smg1[i] - 1)); } else { gordon_freeman = gordon_freeman + (freeman * smg1[i]); } freeman = gordon + (freeman * 9); gordon = gordon * 10; } printf("%d\n", halflife2 - gordon_freeman); return 0; }

(변수명이 저 모양인 것은 최근에 하프라이프2를 다시 했는데 재밌어서 그렇다. 양해 바랍니다.)


0~9 까지의 4의 갯수 = 1개

0~99까지의 4의 갯수 = 9개(4, 14, 24, 34, 54, 64, 74, 84, 94) + 40~49(10개) = 19개

0~999까지의 4의갯수 - 19개 * 9 + 100개

이런 식으로 각 자리수에 포함된 4의 갯수를 뽑을 수 있는 규칙이 발견된다. 

처음 입력 값 (halflife2)에서 구한 4의 갯수(gordon_freeman)을 빼면 원래 값이 나온다.


(14. 11. 15 추가) 그런데 교수님께서 올려주신 모법 답안은 다음과 같다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int m; char n[12];

int main()
{
	scanf("%s", n);
	for (char* p = n; *p; ++p) m = m * 9 + (*p > '4' ? (*p) - '1' : (*p) - '0');
	printf("%d", m);

	return 0;
}

멘붕



반응형
프로필사진

Yowu (Yu Yongwoo)

흔한 Node.js/Java 백엔드 개발자입니다
Ubuntu와 MacOS 데스크탑 개발 환경을 선호합니다
최근에는 vscode와 IntelliJ를 사용하고 있습니다
vscode에는 neovim, IntelliJ는 ideaVim
개발용 키보드는 역시 HHKB Pro 2 무각입니다
락 밴드에서 드럼을 쳤습니다

최근에 올라온 글
최근에 달린 댓글
«   2024/03   »
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
글 보관함
Total
Today
Yesterday