문제 📄
내 풀이 💻
word = input()
orgin = []
for w in word:
ascii_num = ord(w)
if ascii_num >= 68:
orgin.append(chr(ascii_num-3))
else:
orgin.append(chr(ascii_num + 23))
print(''.join(orgin))
설명 🔑
ord(문자) - 문자를 ASCII number로 바꾸기 (ord는 ordinal number, 서수의 약자이다)
chr(숫자) - ASCII number를 문자로 바꾸기 (chr은 char의 약자이다)
원래 문자는 변환 후의 문자보다 3칸만큼 앞에 있는 문자이므로, ord()로 문자를 ascii 숫자로 바꿔준 다음 -3을 해준다.
단, A, B, C는 뒤로 3칸 가면 X, Y, Z가 되므로 그 경우에는 23을 더해 65→88, 66→89, 67→90으로 바꿔준다.
💡
원래 암호 orgin을 리스트로 할당한 다음 나중에 join으로 합쳐서 출력한 까닭은 orgin += new_str 을 하면 계속 새로운 string 객체가 생겨 시간이 걸리기 때문이다. 그것보다는 리스트에 append해서 나중에 합치는 게 더 시간이 덜 걸리므로 코드를 몇 줄 더 쓰더라도 그렇게 해 줬다.
'알고리즘 이론 & 풀이 > 백준(BOJ)' 카테고리의 다른 글
[백준] 1026번 - 보물 (nodejs) (1) | 2023.10.28 |
---|---|
[백준] 2178번 - 미로 탐색 (0) | 2023.08.17 |
[백준] 1260번 - DFS와 BFS (js) (0) | 2023.08.17 |
[백준] 1158번: 요세푸스 문제 (Python) (0) | 2021.11.01 |
[백준] 2444번: 별 찍기 - 7 (Python) (0) | 2021.10.25 |