프로그래머스 LV1 - 둘만의 암호
내 풀이
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로 넘어가는 부분을 나머지 연산을 통해 구현
댓글남기기