[파이썬 코딩테스트] 8.둘만의 암호 - 프로그래머스

링크

내 풀이(O)

  • skip에 포함되는 문자를 제외한 알파뱃 리스트를 만든다
  • 알파뱃 리스트에서 각 문자의 인덱스를 구하고 건너뛸 수를 더한다
  • 새로운 인덱스가 알파뱃 리스트의 길이를 넘어서지 않도록 조정한다
  • 새로운 인덱스로 구한 문자들을 반환한다
from string import ascii_lowercase

def solution(s, skip, index):
    answer = ''

    alph_list = list(char for char in ascii_lowercase if char not in skip)

    for char in list(s):
        new_idx = alph_list.index(char) + index

        while (new_idx >= len(alph_list)):
            new_idx -= len(alph_list)

        answer += alph_list[new_idx]

    return answer

다른 풀이

  • 알파뱃 리스트의 길이로 나눈 나머지 값을 인덱스로 사용
from string import ascii_lowercase

def solution(s, skip, index):
    result = ''

    a_to_z = set(ascii_lowercase)
    a_to_z -= set(skip)
    a_to_z = sorted(a_to_z)
    l = len(a_to_z)

    dic_alpha = {alpha:idx for idx, alpha in enumerate(a_to_z)}

    for i in s:
        result += a_to_z[(dic_alpha[i] + index) % l]

    return result

검증용 코드

ss = ["aukks"]
skips = ["wbqd"]
indexs = [5]
results = ["happy"]

for idx in range(len(results)):
    print(idx, '성공' if solution(ss[idx], skips[idx], indexs[idx]) == results[idx] else "실패")

links

social