최대 1 분 소요

문제 링크

내 풀이

from collections import deque

def solution(s, skip, index):
    alphabet= deque(['a','b','c','d','e','f','g','h','i','j',
               'k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'])
    answer = ''
    for i in skip:
        alphabet.remove(i)
    for i in s:
        t = alphabet.index(i) + index
        alphabet.rotate(-t)
        answer += alphabet[0]
    return answer

다른 풀이

def solution(s, skip, index):

    # 모든 알파벳 소문자에서 skip에 포함된 문자를 제외한 후 정렬된 리스트를 생성
    # set()을 사용하여 중복을 제거하고 sorted()로 정렬
    alps = sorted(set("abcdefghijklmnopqrstuvwxyz") - set(skip))
   
    alps_num = len(alps) # 알파벳 개수
    result = '' # 결과 문자열

    # 문자열 s를 한 글자씩 처리합니다.
    for char in s:
       
        # 1. 현재 문자 char가 alps 리스트에서 몇 번째 위치에 있는지 찾기
        # 2. 주어진 index만큼 더한 후 새로운 위치를 계산하고 유효한 범위 내로 조정
        # 3. 새로운 위치에 해당하는 알파벳을 결과 문자열에 추가
        result += alps[(alps.index(char)+index)%alps_num]
       
    return result

풀이 해석

알파벳을 set함수로 나타낸 후 skip만큼 빼주었다. s의 원소의 index를 찾아내면서 z를 넘을경우 다시 a부터 시작시키기위해 나머지 연산을 이용하였다.

배울 점

  • set을 이용해 알파벳 - skip 을 구현함
  • z에서 a로 넘어가는 부분을 나머지 연산을 통해 구현

댓글남기기