1+ # 19. 시저 암호
2+
3+ def solution (s , n ):
4+ answer = ''
5+
6+ for char in s :
7+ if char .isalpha ():
8+ if 65 <= ord (char ) <= 90 :
9+ if ord (char ) + n > 90 :
10+ answer += chr (ord (char ) - 26 + n )
11+ else :
12+ answer += chr (ord (char ) + n )
13+ else :
14+ if ord (char ) + n > 122 :
15+ answer += chr (ord (char ) - 26 + n )
16+ else :
17+ answer += chr (ord (char ) + n )
18+ else :
19+ answer += ' '
20+ return answer
21+
22+ s_1 = 'AB'
23+ s_2 = 'z'
24+ s_3 = 'a B z'
25+
26+ n_1 = 1
27+ n_2 = 1
28+ n_3 = 4
29+
30+ print (solution (s_1 , n_1 ))
31+ print (solution (s_2 , n_2 ))
32+ print (solution (s_3 , n_3 ))
33+
34+ def solution_best (s , n ):
35+ answer = ''
36+ str = list (s )
37+ for i in range (len (str )):
38+ if str [i ].isupper ():
39+ str [i ] = chr ((ord (str [i ]) - ord ('A' ) + n ) % 26 + ord ('A' ))
40+ elif str [i ].islower ():
41+ str [i ] = chr ((ord (str [i ]) - ord ('a' ) + n ) % 26 + ord ('a' ))
42+
43+ answer = '' .join (str )
44+ return answer
45+
46+ print (solution_best (s_1 , n_1 ))
47+ print (solution_best (s_2 , n_2 ))
48+ print (solution_best (s_3 , n_3 ))
49+ # 틀린 풀이
50+ def solution_error (s , n ):
51+ answer = ''
52+
53+ # string을 ascii로 바꾼 리스트
54+ str_ascii_lst = [ord (i ) for i in s ]
55+ # print(str_ascii_lst)
56+
57+ for idx , cost in enumerate (str_ascii_lst ):
58+ if cost == 32 :
59+ str_ascii_lst [idx ] -= 4
60+ str_ascii_lst [idx ] += n
61+
62+ # print(str_ascii_lst)
63+ for i in str_ascii_lst :
64+ idx = str_ascii_lst .index (i )
65+ if 90 < i and i < 97 :
66+ rest = i - 90
67+ str_ascii_lst [idx ] = 64 + rest
68+ elif 122 < i :
69+ rest = i - 122
70+ str_ascii_lst [idx ] = 96 + rest
71+
72+ answer = '' .join (chr (i ) for i in str_ascii_lst )
73+ return answer
0 commit comments