• Feed
  • Explore
  • Ranking
/
/
    🧩알고리즘

    [프로그래머스] 시저암호 (Python)

    문자열
    k
    kawaihachiwarae
    2026.03.04
    ·
    6 min read

    🔗 문제 링크

    https://school.programmers.co.kr/learn/courses/30/lessons/12926

    문제 설명

    어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

    제한 조건

    • 공백은 아무리 밀어도 공백입니다.

    • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.

    • s의 길이는 8000이하입니다.

    • n은 1 이상, 25이하인 자연수입니다.

    입출력 예

    s n result

    "AB"

    1

    "BC"

    "z"

    1

    "a"

    "a B z"

    4

    "e F d"

    ✔ 풀이

    def solution(s, n):
        answer = ''
        
    
        for i in s:
            if i == ' ':
                answer += ' '
                continue 
            if i.islower():
                word = chr(ord(i)+n-26) if ord(i) + n > 122 else chr(ord(i)+n)
            elif i.isupper():
                word = chr(ord(i)+n-26) if ord(i) + n > 90 else chr(ord(i)+n)
            answer += word
        return answer
    

    😀 풀이 설명

    각 문자를 순회하면서 세 가지 경우로 나눈다.

    공백일 때 — 그대로 넣고 continue로 넘어간다.

    소문자일 때 — ord(i) + n이 122(z)를 넘으면 26을 빼서 a부터 다시 돌아간다. 넘지 않으면 그냥 n만큼 밀면 된다.

    대문자일 때 — 같은 원리로, ord(i) + n이 90(Z)을 넘으면 26을 빼서 A부터 다시 돌아간다.

    예시: s = "a B z", n = 4

    a

    소문자, 97+4=101 ≤ 122

    chr(101) = e

    공백

    B

    대문자, 66+4=70 ≤ 90

    chr(70) = F

    공백

    z

    소문자, 122+4=126 > 122 → 126-26=100

    chr(100) = d

    결과: "e F d"

    핵심 포인트

    알파벳은 26글자이므로, 범위를 넘었을 때 26을 빼면 다시 처음으로 돌아온다. 대문자(A=65, Z=90)와 소문자(a=97, z=122)의 기준값이 다르므로 분기 처리가 필요하다.







    - 컬렉션 아티클