본문 바로가기
알고리즘/Programmers

[Programmers] LV1. 둘만의 암호 (Feat. Python)

by 프룹 2023. 2. 5.
반응형

먼저, 이 문제를 봤을 때 "일단 모든 알파벳을 리스트에 넣고, skip에 있는 알파벳을 제거하자" 라는 생각이 딱 들었다.

그리곤 인덱스를 잘 이용하면 되겠다는 생각이 들었다.

 >> 아마도 이건 여러 문자열 문제를 풀면서 체득한..

 

그래서 

 

s = "aukks"

skip = "wbqd"

index = 5

alpha = [chr(i) for i in range(97, 123)]
alpha = sorted(list(set(alpha) ^ set(list(skip))))

다음과 같이 26개의 알파벳에서 skip에 포함된 4개 문자를 제거한 22개의 알파벳 리스트를 만들었다.

 

['a', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z']

 

이제 간단하게 각 문자의 인덱스에서 5를 더하면

 

 a : 0 + 5 = 5 % 22 = 5 => h

 u : 17 + 5 = 22 % 22 = 0 => a

 k : 8 + 5 = 13 % 22 = 13 => p

 k : 8 + 5 = 13 % 22 = 13 => p

 s : 15 + 5 = 20 % 22 = 20 => y

 

따라서, s 변수의 각 문자에 대해 alpha 리스트에 해당하는 idx를 구하고, idx에 입력 index를 더하면 된다.

단, idx + index가 alpha의 범위를 넘어가면 다시 첫 번째 idx로 돌아가기 때문에 모듈러(%) 연산을 이용해서 

알맞는 idx를 구할 수 있다.

 

# 정답 코드

def solution(s, skip, index):
    answer = ''
    
    alpha = [chr(i) for i in range(97, 123)]
    alpha = sorted(list(set(alpha) ^ set(list(skip))))
    
    for _s in list(s):
        idx = alpha.index(_s) + index
        answer += alpha[idx % len(alpha)]
    return answer

 

# 소요시간

반응형

댓글