TIL(25.1.7)

채채·2025년 1월 7일

Today I Learned

목록 보기
51/75

오늘의 코드카타
https://school.programmers.co.kr/learn/courses/30/lessons/12926

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

나는 아스키코드를 몰라서 하드코딩함.
내 코드

def solution(s, n) :
    answer = ''
    ALP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    alp = ALP.lower()

    for i in s :
        if i in ALP : 
            answer += ALP[(ALP.index(i) + n) % len(ALP)]
        elif i in alp :
            answer += alp[(alp.index(i) + n) % len(alp)]
        else :
            answer += i
    return answer

사실 이 문제는 아스키코드와 모듈로연산자를 사용하여 푸는게 이상적인 문제임.

조원분께서 아스키코드와 모듈로 연산자에 대한 설명을 자세히해줘서 이해할 수 있었음.

  • 아스키코드표

아스키 코드에서 A는 65번, a는 97번 인것을 외워두면 좋다고 함.
대문자와 소문자의 차이는 32.

아스키코드와 함께 새로운 함수도 배움.

#ASCII Code의 변환
print(ord("A"))   # 65
print(ord("a"))   # 97
print(chr(65))    # A
print(chr(97))    # a

ord는 아스키코드의 십진수를 반환
cha는 아스키코드의 십진수를 알파벳으로 반환함

최종답안은
조원님 코드를 살짝 수정함.

def solution(s, n):
    answer = ''
    for char in s:
        if char.isupper():
            answer += chr((ord(char) - ord("A") + n) % 26 + ord('A'))
        elif char.islower():
            answer += chr((ord(char) - ord('a') + n) % 26 + ord('a'))
        else:
            answer += char
    return answer
profile
화이팅

0개의 댓글