https://www.acmicpc.net/problem/11655
문제
21.02.26 접근법
z인 122를 넘어가면 26을 빼 다시 돌아가게 함.
대문자도 동일하게 적용
21.02.26 코드
s=input()
answer=''
for x in s:
if 'a'<=x and x<='z':
x=ord(x)+13
if x>122:
x-=26
answer+=chr(x)
elif 'A'<=x and x<='Z':
x=ord(x)+13
if x>90:
x-=26
answer+=chr(x)
else:
answer+=x
print(answer)
21.08.02 접근법
소문자 a의 아스키코드인 97을 기준으로, 대문자 A의 아스키코드인 65 기준으로 연산
chr(97+(ord(i)+13-97)%26) 수식 풀이
1. i를 아스키 코드로 변환 후 13을 더함.
2. 그 후, 97을 제외하고 26으로 나눴을 때 나머지를 구함.
(이유 -13을 더하다보면 아스키 코드에서 z를 넘어가게 됨. 이에, a부터 0으로 통일하기 위해 2와 같은 수식을 함.)
3. 97부터 2번에서 나온 값을 더하면 a부터 z를 벗어나지 않음.
4. 3의 값을 chr함수를 통해 다시 문자로 변환
(예시)
13을 더해 123이 나오면 122가 z이므로 범위를 벗어남.
때문에 2번의 수식을 대입하면 0이 나옴.
여기에 97+0을 해주면 a로 돌아가게 됨.
chr(65+(ord(i)+13-65)%26)인 대문자도 동일
/////
시간 계산을 위해 여러가지 시도를 해봄.
1. 2월 달에 한 알고리즘과 시간을 비교했을 때 비슷
2. 하나하나 print가 아닌 ans에 모아서 했을 때도 시간은 비슷
3. islower(), isupper() 함수가 아닌, 'a'<=i<='z', 'A'<=i<='Z'로 했을 때도 시간은 비슷
결론...!! 다 비슷했음. 하고싶은대로 하면 됨!!
21.08.02코드
arr=input()
ans=''
for i in arr:
if i.islower():
print(chr(97+(ord(i)+13-97)%26), end='')
elif i.isupper():
print(chr(65+(ord(i)+13-65)%26), end='')
else:
print(i,end='')
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 11656번 접미사 배열 - 파이썬(Python) (0) | 2021.08.04 |
---|---|
[백준] 10824번 네 수 - 파이썬(Python) (0) | 2021.08.03 |
[백준] 2743번 단어 길이 재기 - 파이썬(Python) (0) | 2021.08.02 |
[백준] 10820번 문자열 분석 - 파이썬(Python) (0) | 2021.08.01 |
[백준] 10809번 알파벳 찾기 - 파이썬(Python) (1) | 2021.07.31 |