본문 바로가기
Algorithm_PYTHON

[백준_파이썬]11655_ROT13

by 코리니덕 2021. 9. 15.

내 풀이 - 틀린 답

: 출력 형식이 잘못됐다고 나온다 ㅠ

'a'이런식으로 쓰면 아스키코드로 인식하는 건 s대신 문자를 썼을 때임!

# split()는 기본적으로 공백을 기준으로 문자열을 나눔
words = input().split()

for word in words:
    for str in word:
        s = ord(str)
        # 아스키코드가 대문자 범위(65~90) 안에 있고, 
        if ord('A') <= s <= ord('Z'):
            # s+13이 Z를 넘지 않으면 13을 더하고
            if s+13 <= ord('Z'):
                s += 13
            else: # 넘으면 아래 식처럼
                s = ord('A') + 13 - (ord('Z') - s) -1


        # 아스키코드가 소문자 범위(97~122) 안에 있으면 +13
        # 범위를 넘으면 다시 돌려야 되니까
        elif ord('a') <= s <= ord('z'):
            # s+13이 z를 넘지 않으면 13을 더하고
            if s+13 <= ord('z'):
                s += 13
            else: # 넘으면 아래 식처럼
                s = ord('a') + 13 - (ord('z') - s) -1

        print(chr(s), end="")

    print(end=" ")

 

내 풀이 - 맞은 답

- split()지우고, 공백자체를 같이 넣어서 받아주니까 해결

# # split()는 기본적으로 공백을 기준으로 문자열을 나눔
words = input()

answer = ''
for word in words:
    for str in word:
        s = ord(str)
        # 아스키코드가 대문자 범위(65~90) 안에 있고, 
        if ord('A') <= s <= ord('Z'):
            # s+13이 Z를 넘지 않으면 13을 더하고
            if s+13 <= ord('Z'):
                s += 13
            else: # 넘으면 아래 식처럼
                s = ord('A') + 13 - (ord('Z') - s) -1


        # 아스키코드가 소문자 범위(97~122) 안에 있으면 +13
        # 범위를 넘으면 다시 돌려야 되니까
        elif ord('a') <= s <= ord('z'):
            # s+13이 z를 넘지 않으면 13을 더하고
            if s+13 <= ord('z'):
                s += 13
            else: # 넘으면 아래 식처럼
                s = ord('a') + 13 - (ord('z') - s) -1
        answer += chr(s)
        

print(answer)

 

내 풀이 - 틀린답, 확인 다시하기 ㅜ

- 애초에 +13을 한 값이 z, Z를 넘는지 확인하면 됨

- 넘었을 시, 26빼면 됨 왜냐하면! 알파벳 갯수는 26개이기 때문이지!

- 하지만 틀렸지,,!

# 26을 빼면, 한 바퀴 도는 효과
# 애초에 공백도 같이 받아서 따로 출력할 필요 없게 하기
# 왜 틀렸는지 모르겠다 ㅠㅠ
word = input()
answer = ''

for w in word:
    # 먼저 13을 더하면 공백도 더하게 되니까 범위 안에서 더해주기
    # w = chr(ord(w) + 13)
    s = ord(w) + 13
    # 소문자/ 대문자 범위 내면 그냥 더하기 
    if ord('a') <= s <= ord('z') or ord('A') <= s <= ord('Z'):
        answer += chr(s)
    elif s > ord('z') or s > ord('Z'):
        answer += chr(s - 26)
    else:
        answer += chr(s - 13)
    
print(answer)