[HackerRank] The Love-letter Mystery - Python3 풀이 (String, EASY)

leehyuna·2022년 5월 1일
0

코딩테스트

목록 보기
5/8
post-thumbnail
  • 문제 설명 🤓
    문제는 주어진 문자열을 문자 하나씩 바꿔 최소한의 변경으로 palindrome으로 만드는 문제이다.
    문자를 바꿀 때는 c->b, e->d 와 같이 알파벳 순서 1개 전 문자로 바꿀 수 있으며, a는 전 알파벳이 없으니 바꿀 수 없다.
  • 나의 풀이 포인트 📌
    (1) 알파벳의 ascii 코드 차이를 이용하여 바꿔야하는 횟수를 계산한다.
    (2) 문자열을 반으로 나누어 비교한다.
  • 알아 둘 것 ⭐️
    (1) ord(), chr()

    • ord(문자)
      : 하나의 문자를 인자로 받아 해당하는 유니코드 정수를 반환

    • chr(정수)
      : 하나의 정수를 인자로 받아 해당하는 유니코드 문자를 반환

      ord('a')  # 97
      ord('z')  # 122
      ord('A')  # 65
      ord('Z')  # 90
      ord('ㄱ') # 12593
      ord('ㅎ') # 12622
      
      chr(97)    # a
      chr(122)   # z
      chr(12593) # ㄱ

    (2) 문자열 뒤집기

    • slicing을 이용하는 방법
      	string = 'HackerRank'
          reversed_string = string[::-1] # knaRrekcaH
    • reversed() 함수를 이용하는 방법
      : reversed()는 반대방향으로 순회하는 iterator를 반환
          string = 'HackerRank'
          reversed_string = ''.join(reversed(string)) # knaRrekcaH
  • python 코드

def theLoveLetterMystery(s):

    if len(s) == 1: # 길이가 1인 문자열은 이미 palindrome
        return 0
    else:
        mid = len(s) // 2
        left = s[:mid]
        if len(s) % 2 == 1: # 문자열 길이가 홀수인 경우
            right = s[mid + 1:]
        elif len(s) % 2 == 0: # 문자열 길이가 짝수인 경우
            right = s[mid:]

        right = right[::-1]  # 오른쪽 절반 문자열 뒤집기

        if left == right:  # 왼쪽 문자열과 오른쪽 뒤집은 문자열이 같으면 palindrome!
            return 0
        else:
            diff = list(map(lambda l, r: ord(l) - ord(r) if l > r else ord(r) - ord(l), left, right))
            return sum(diff)
            
profile

0개의 댓글