본문 바로가기
Programming/Project Euler

17. 프로젝트 오일러 #17 : 영어 단어의 글자수 세기.

by 작은별하나 2015. 1. 14.
반응형

이번 문제는 문제 자체의 난이도보다는, 영어 단어를 세는 것 자체가 너무 짜증났던 문제입니다.  그리고 우리가 보통 사용하지 않는 'and'까지 쳐서 해주어야 하니까요.


답을 썼는데 계속 틀리다고 나와서, 왜 그런가 했더니, 제가 글자수 하나를 더 쳤네요.  18 과 80 때문에 둘다 그랬네요.  단순하게 8(eight) + 'teen' 과 8(eight) + 'ty' 로 해서 5+4, 5+2 했던 것이 문제였네요.


그냥 #1 부터 계속 풀어보자 생각했던터라, 이 문제를 풀고 싶지는 않았지만, 그냥 풀어 보았습니다.



#include <stdio.h>

int main()
{
        int wc[20] = { 0, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8 };
        int wct[20] = { 0, 0, 6, 6, 5, 5, 5, 7, 6, 6 };
        int hundred = 7;
        int thousand = 8;
        int andword = 3;

        int sum = 0;
        for( int i = 1 ; i <= 1000 ; i++ )
        {
                int t = i/1000;
                int h = (i/100)%10;
                int s = (i%100>=20)?(i/10)%10:0;
                int v = (i%100>=20)?i%10:i%100;

                int r = 0;
                if( t ) r += wc[t]+thousand;
                if( h ) r += wc[h]+hundred;
                if( s ) r += wct[s];
                if( v ) r += wc[v];
                if( (t | h) && (s | v) ) r += andword;
                sum += r;
        }
        printf("Ans = %d\n", sum);
}


728x90

댓글