[python_파이썬_pass]프로그래머스_LV1_시저 암호_풀이
2024. 5. 9. 12:30ㆍ코드리뷰
728x90
반응형
공부하는허딩크 : https://www.youtube.com/live/kdCOczz1e9c?feature=shared
쉽게 봤다가 애를 좀 먹었다.
문제를 크게 보고 정확히 이해하자.!
<첫번째 시도 : 실패>
처음 실패 이후 왜 실패인지도 정확히 알아차리지 못했음, 공백 조건이 있어 2개 이상 공백이 나와도 1개로 처리해야하나? 이런생각만 함.
def solution1(s, n):
answer = ''
for i in s:
if i.isalpha():
if i == 'z' or i == 'Z':
answer += chr(ord(i) + n - 26)
else:
answer += chr(ord(i) + n)
else:
answer += i
return answer
<두번째 시도 : 실패>
당연히 첫번째 실패 이후 문제점을 잘못찾았으니 실패....
def solution2(s, n):
answer = ''
for i in s:
if i == 'z' or i == 'Z':
answer = s.replace(i, chr(ord(i) + n - 26))
else:
answer = s.replace(i, chr(ord(i) + n))
return answer
<세번째 시도 : 실패>
계속 공백 조건이 잘못된 부분인줄 알고 그부분만 공략함 : 당연히 실패
def solution3(s, n):
answer = ''
for index, i in enumerate(s):
if i.isalpha():
if i == 'z' or i == 'Z':
answer += chr(ord(i) + n - 26)
else:
answer += chr(ord(i) + n)
else:
if s[index] == ' ' and s[index - 1] == ' ':
continue
else:
answer += i
return answer
<네번째 시도 : 성공>
공백은 상관 없었고, 문제를 너무 단순하게 봤음.
알파벳 + n이 z를 벗어나는 조건을 찾아냈음.
def solution(s, n):
answer = ''
for i in s:
if i.isupper():
if (ord(i) + n) > ord('Z'):
answer += chr(ord(i) + n - 26)
else:
answer += chr(ord(i) + n)
elif i.islower():
if (ord(i) + n) > ord('z'):
answer += chr(ord(i) + n - 26)
else:
answer += chr(ord(i) + n)
else:
answer += i
return answer
<다른사람풀이 참고>
나머지를 활용했네? 아직까지 나머지를 활용한 수학적 문제접근이 부족한 것 같다.
즉, s = "AB", n = 1이면
A는 아스키 코드로 65니까 (65-65 + 1) % 26을 해서 1이 나오게 한다음 65를 더해서 66이 나오게끔하는 접근
C가 온다면 67-65+1 = 3 % 26 = 3 + 65는 68이라서 D가 나오게 하는 접근
def solution(s, n):
s = list(s)
for i in range(len(s)):
if s[i].isupper():
s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
elif s[i].islower():
s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))
return "".join(s)
728x90
반응형
'코드리뷰' 카테고리의 다른 글
[python_파이썬_pass]프로그래머스_LV1_문자열 내 마음대로 정렬하기_풀이 (0) | 2024.05.10 |
---|---|
[python_파이썬_pass]프로그래머스_LV1_최소직사각형_풀이 (0) | 2024.05.10 |
[python_파이썬_pass_복습]프로그래머스_LV1_삼총사_풀이 (0) | 2024.05.08 |
[python_파이썬_pass]프로그래머스_LV1_크기가 작은 부분문자열_풀이 (0) | 2024.05.08 |
[python_파이썬]프로그래머스_LV1_예산_풀이 (0) | 2024.05.08 |