파이썬 알고리즘 문제 풀이

BaekJoon Online Judge 11655번 파이썬

gogi masidda 2022. 6. 24. 19:20

문제 링크
https://www.acmicpc.net/problem/11655

11655번: ROT13

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

www.acmicpc.net


처음엔 알파벳 리스트를 직접 작성하여 그것을 바탕으로 이 문제를 풀어가려 했다.
하지만 이렇게 하면 코드가 복잡해보였다.
그래서 해결방법을 알아보던 중 아스키 코드로 해결하는 방법을 보고 아스키 코드를 이용하여 해결했다.

처음에 잘못 짠 코드

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