문제 링크
https://www.acmicpc.net/problem/11655
처음엔 알파벳 리스트를 직접 작성하여 그것을 바탕으로 이 문제를 풀어가려 했다.
하지만 이렇게 하면 코드가 복잡해보였다.
그래서 해결방법을 알아보던 중 아스키 코드로 해결하는 방법을 보고 아스키 코드를 이용하여 해결했다.
처음에 잘못 짠 코드
for s in string:
if s.isupper():
now_index = alphabet.index(s.lower())
password_index = now_index + 13
if password_index > 25:
password_index -= 26
password_alphabet = alphabet[password_index].upper()
elif s.islower():
now_index = alphabet.index(s)
password_index = now_index + 13
if password_index > 25:
password_index -= 26
password_alphabet = alphabet[password_index]
print(password_alphabet)
정답 코드
import sys
string = list(sys.stdin.readline().rstrip("\n"))
for i in range(0,len(string)):
if string[i].isalpha():
if string[i].isupper():
if ord(string[i]) + 13 <= 90:
string[i] = chr(ord(string[i]) + 13)
elif ord(string[i]) + 13 > 90:
string[i] = chr(ord(string[i]) -13)
elif string[i].islower():
if ord(string[i]) + 13 <= 122:
string[i] = chr(ord(string[i])+13)
elif ord(string[i]) + 13 > 122:
string[i] = chr(ord(string[i])-13)
for s in string:
print(s, end="")
문자열은 인덱스를 활용하여 할당할 수 없다. 그럴 땐, list(sys.stdin.readline())을 활용하면 된다.
아스키 코드를 이용해야함.
org() : 문자를 아스키 코드로 반환해주는 함수.
chr(): 아스키 코드를 문자로 반환해주는 함수.
리스트를 문자열처럼 출력하기.
for s in string:
print(s, end="")
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 11656번 파이썬 (0) | 2022.06.27 |
---|---|
BaekJoon Online Judge 10824번 파이썬 (0) | 2022.06.24 |
BaekJoon Online Judge 2743 파이썬 (0) | 2022.06.23 |
BaekJoon Online Judge 10820 파이썬 (0) | 2022.06.23 |
BaekJoon Online Judge 10809번 파이썬 (0) | 2022.05.17 |