Algorithm/Project Euler

프로젝트 오일러 17번

할루루 2017. 7. 3. 15:16
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일 경우에만 특별하게 처리해주었고


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



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