[BOJ] 11655: ROC13

이슬비·2022년 5월 4일
0

Algorithm

목록 보기
35/110
post-thumbnail

뿌듯해 뿌듯해 아주 열심히 잘 풀었다 ㅎㅎㅎ 조금 제정신 아닌 상태에서 풀어서 이상한 곳에서 자꾸 삐끗삐끗했지만 ~ 결론은 풀었으니까 ~

11655: ROC13

1. 내 풀이: 성공

import sys

string = list(sys.stdin.readline().rstrip())
answer = []

# 대문자: 65~90
# 소문자: 97~122

for i in string:
    alpha = ord(i)
    if (65<=alpha<=90):
        new = alpha+13
        if (new) > 90:
            new -= 26
        answer.append(chr(new))
        new = 0    
    elif (97<=alpha<=122):
        new = ord(i)+13
        if (new) > 122:
            new-= 26
        answer.append(chr(new))
        new = 0
    else:
        answer.append(i)
    
for i in answer:
    print(i, end='')
    

알파벳 아스키코드는 외우고 있자... 사실 외워야지 !!! 라는 마음이 아니라 그냥 문제 풀다보면 너무 많이 나와서 자동으로 외워진다 ^^

하나하나 뜯어보자.

import sys

string = list(sys.stdin.readline().rstrip())
answer = []

일단 string을 list 형태로 하나하나 잘라서 받아주고, 답을 저장해둘 answer list도 하나 만들어둔다.

# 대문자: 65~90
# 소문자: 97~122

for i in string:
    alpha = ord(i)
    if (65<=alpha<=90):
        new = alpha+13
        if (new) > 90:
            new -= 26
        answer.append(chr(new))
        new = 0    
    elif (97<=alpha<=122):
        new = ord(i)+13
        if (new) > 122:
            new-= 26
        answer.append(chr(new))
        new = 0
    else:
        answer.append(i)

이제 string 하나하나를 분석해준다. 처음에는 if문에서 ord를 썼는데, 그것보다는 alpha에 값을 저장해두고 그걸 하나하나 불러오는 게 시간이 덜 걸릴 것 같아서 alpha라는 변수를 정의했다.
만약 alpha가 대문자의 아스키코드에 해당하는 65~90 이면 13을 더한 수를 new 변수에 저장한다. 이때 대문자는 대문자끼리 순환을 하니까 대문자의 Maximum인 90을 넘는다면 거기서 26을 빼준다. 그러면 91의 경우 65가 되어서 순환할 수 있다.
소문자 역시 같은 맥락으로 코드를 짰다.
그리고 만일 숫자, 공백 같은 알파벳이 아닌 문자가 들어왔을 때는 그 자체를 answer에 append 해준다.

이렇게 하면,

이렇게 된다.

2. 다른 사람 풀이

저번에 나에게 신선한 충격(?)을 안겨주었던 분의 블로그를 참고하였다.
(출처: https://youjin86.tistory.com/45)

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)

전체적인 로직은 나와 비슷하지만, 문자열 자체로 for문을 돌린 것 같은 자잘한 부분이 나와 다르다.

오늘도 신기한 알고리즘의 세계 끄으으읕~!~!~!

profile
정말 알아?

0개의 댓글