티스토리 뷰

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
sum_result=0
HUNDRED_AND=10
for number in range(1,1001):
    sum=0
    number_str=str(number)
    number_length=(len(number_str))
    if(number_length==1):   #한 자리 수
        if(number==1 or number==2 or number==6):
            sum=sum+3
        elif(number==3 or number==7 or number==8):
            sum=sum+5
        elif(number==4 or number==5 or number==9):
            sum=sum+4
    elif(number_length==2): #두 자리 수
        first=number_str[0]
        second=number_str[1]
        if(first=='1'):     #10~19는 특수한 경우
            if(second=='0'):
                sum=sum+3
            elif(second=='1' or second=='2'):
                sum=sum+6
            elif(second=='3' or second=='4' or second=='8' or second=='9'):
                sum=sum+8
            elif(second=='5' or second=='6'):
                sum=sum+7
            elif(second=='7'):
                sum=sum+9
        else:               #20~99
            if(first=='2' or first=='3' or first=='8' or first=='9'):
                sum=sum+6
            elif(first=='5' or first=='6' or first=='4'):
                sum=sum+5
            elif(first=='7'):
                sum=sum+7
            if(second=='1' or second=='2' or second=='6'):
                sum=sum+3
            elif(second=='3' or second=='7' or second=='8'):
                sum=sum+5
            elif(second=='4' or second=='5' or second=='9'):
                sum=sum+4
    elif(number_length==3): #세 자리 수
        first=number_str[0]
        second=number_str[1]
        third=number_str[2]
        if(first=='1' or first=='2' or first=='6'):
            sum=sum+3+HUNDRED_AND
        elif(first=='3' or first=='7' or first=='8'):
            sum=sum+5+HUNDRED_AND
        elif(first=='4' or first=='5' or first=='9'):
            sum=sum+4+HUNDRED_AND
        if(second=='0'):    #x01~x09
            if(third=='1' or third=='2' or third=='6'):
                sum=sum+3
            elif(third=='3' or third=='7' or third=='8'):
                sum=sum+5
            elif(third=='4' or third=='5' or third=='9'):
                sum=sum+4
            elif(third=='0'):
                sum=sum-3
        elif(second=='1'):  #x10~x19
            if(third=='0'):
                sum=sum+3
            elif(third=='1' or third=='2'):
                sum=sum+6
            elif(third=='3' or third=='4' or third=='8' or third=='9'):
                sum=sum+8
            elif(third=='5' or third=='6'):
                sum=sum+7
            elif(third=='7'):
                sum=sum+9
        else:   #x20~x99
            if(second=='2' or second=='3'  or second=='8' or second=='9'):
                sum=sum+6
            elif(second=='5' or second=='6' or second=='4'):
                sum=sum+5
            elif(second=='7'):
                sum=sum+7
            if(third=='1' or third=='2' or third=='6'):
                sum=sum+3
            elif(third=='3' or third=='7' or third=='8'):
                sum=sum+5
            elif(third=='4' or third=='5' or third=='9'):
                sum=sum+4
    elif(number_length==4): #네 자리 수(1000)
        sum=sum+11
    sum_result=sum_result+sum
print(sum_result)
 
 
cs



100 이상으로 갈 때 'hundred and'가 무조건 붙기 때문에 미리 관련 변수를 지정하여 연산해 주었는데,


생각해보니 100은 'one hundred'로 and가 붙지 않는 숫자였다.


그래서 100일 경우에만 특별하게 처리해주었고


나머지는 비슷한 코드로 구성하였다.



함수를 만들어 코드를 더 짧게 만들 수 있을 것 같다.

'Algorithm > Project Euler' 카테고리의 다른 글

프로젝트 오일러 13번  (0) 2017.07.03
프로젝트 오일러 19번  (0) 2017.07.03
프로젝트 오일러 48번  (0) 2017.07.03
프로젝트 오일러 42번  (0) 2017.07.02
프로젝트 오일러 40번  (0) 2017.07.02
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함