[HackerRank] Caesar Cipher

JAMM·2023년 3월 18일
0

HackerRank

목록 보기
7/7
post-thumbnail

Problem


Code

#!/bin/python3

import math
import os
import random
import re
import sys
from string import ascii_lowercase

#
# Complete the 'caesarCipher' function below.
#
# The function is expected to return a STRING.
# The function accepts following parameters:
#  1. STRING s
#  2. INTEGER k
#

def caesarCipher(s, k):
    # Write your code here
    
    '''
    Step 1.
    문제에서 k의 범위가 0 <= k <= 100으로 주어졌기 때문에
    알파벳의 길이인 26을 넘어가는 경우가 발생할 수 있으므로
    k는 26으로 나눈 나머지 값으로 설정
    '''
    k = k % 26
    
    '''
    Step 2.
    일반적인 알파벳의 순서에 맞춘 org_alphabet 리스트와
    k만큼 알파벳의 순서를 rotate한 enc_alphabet 리스트를 이용하여
    hash_table 딕셔너리 생성
    '''
    org_alphabet = list(ascii_lowercase)
    enc_alphabet = org_alphabet[k:] + org_alphabet[:k]
    hash_table = dict(zip(org_alphabet, enc_alphabet))
    
    '''
    Step 3.
    문자열 s를 hash_table에서 encrypted된 알파벳을 찾아서
    answer에 추가
    알파벳이 아닌 문자는 문자열 s의 값 그대로 사용
    '''
    answer = ''
    for idx, i in enumerate(s):
        try:
            if i.isupper():
                answer += hash_table[i.lower()].upper()
            else:
                answer += hash_table[i]
        except:
            answer += s[idx]
    return answer
    

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input().strip())

    s = input()

    k = int(input().strip())

    result = caesarCipher(s, k)

    fptr.write(result + '\n')

    fptr.close()

Reference

HackerRank - Caesar Cipher

0개의 댓글