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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

<문제 설명>

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

<제한 조건>
공백은 아무리 밀어도 공백입니다.
s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
s의 길이는 8000이하입니다.
n은 1 이상, 25이하인 자연수입니다. 

 

def solution(s, n):
    answer = ''
    for i in s:
        if i == ' ':  # 공백은 그대로 추가
            answer += i
        elif 'a' <= i <= 'z':  # 소문자 범위
            answer += chr((ord(i) - ord('a') + n) % 26 + ord('a'))
        elif 'A' <= i <= 'Z':  # 대문자 범위
            answer += chr((ord(i) - ord('A') + n) % 26 + ord('A'))
    return answer

ord() 함수

ord() 함수는 지정한 문자에 해당하는 아스키 코드 값을 반환합니다. 예를 들어, ord('A')는 65를 반환하며, ord('a')는 97을 반환합니다.

 

chr() 함수

chr() 함수는 지정한 아스키 코드 값에 해당하는 문자를 반환합니다. 예를 들어, chr(65)는 'A'를 반환하며, chr(97)는 'a'를 반환합니다.

 

chr((ord(i) - ord('a') + n) % 26 + ord('a'))

 

  • 문자를 숫자로 변환:
    • ord(i)는 문자 i의 아스키 코드를 반환합니다. 예를 들어, ord('a')는 97입니다.
    • 알파벳을 0부터 25 사이의 숫자로 표현하기 위해 ord(i) - ord('a')를 계산합니다. 예를 들어, ord('b') - ord('a') = 98 - 97 = 1입니다. 즉, 'a'는 0, 'b'는 1, ..., 'z'는 25로 변환됩니다.
  • n만큼 이동:
    • 이제 해당 문자에 대해 n만큼 이동해야 하므로 (ord(i) - ord('a')) + n을 계산합니다.
    • 예를 들어, 'a'에서 2만큼 이동하려면 0 + 2 = 2가 됩니다.
  • 순환 처리:
    • 알파벳 범위를 넘어설 경우(예: 'z'에서 1만큼 이동하면 'a'로 돌아가야 함), 순환을 처리하기 위해 26으로 나눈 나머지를 구합니다. 이는 (ord(i) - ord('a') + n) % 26으로 표현됩니다.
    • 예를 들어, 'z'에서 1만큼 이동하면 25 + 1 = 26이 되지만, 26을 26으로 나누면 나머지가 0이므로 다시 'a'가 됩니다.
  • 숫자를 다시 문자로 변환:
    • 마지막으로, 다시 원래 문자로 변환해야 하므로 + ord('a')를 더합니다.
    • 예를 들어, 2를 다시 문자로 변환하려면 chr(2 + ord('a')) = chr(99)가 되며, 이는 'c'입니다.

 

'알고리즘' 카테고리의 다른 글

슬라이딩 윈도우로 원형 수열의 부분합 구하기  (0) 2024.11.30
하샤드 수  (0) 2024.11.21
약수의 개수와 덧셈  (0) 2024.08.21
없는 숫자 더하기  (0) 2024.08.16
회문(palindrome)  (0) 2024.04.19

+ Recent posts