-
둘만의 암호
문제 설명
두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.
- 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
- index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
- skip에 있는 알파벳은 제외하고 건너뜁니다.
예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.
두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.
내 풀이
def solution(s, skip, index):
answer = ''
alphabets = [chr(i) for i in range(ord('a'),ord('z')+1)]
for a in skip:
alphabets.remove(a)
for i in s:
temp = i
for j in range(index):
try:
temp = alphabets[alphabets.index(temp) + 1]
except IndexError:
temp = alphabets[0]
answer += temp
return answer
처음에는 문제에 나와있는 그대로 skip에 포함된 문자를 만나면 넘어가는 식으로 했는데 시간초과가 발생했다.
그래서 고민하다가 skip에 있는 문자열을 아예 지우면 되는 것이 생각났다.
try except로 alphabets배열을 넘어가는 경우를 잡았다.
skip에 있는 문자열을 지우는 것은 set으로 차집합을 이용해도 될거 같다.
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] Lv3. 정수 삼각형 파이썬 DP (0) | 2024.02.10 |
---|---|
[프로그래머스] Lv0. 등수 매기기 (0) | 2024.02.09 |
[프로그래머스] Lv2. 귤 고르기 파이썬 (2) | 2024.02.03 |
[프로그래머스] 로그인 성공? (0) | 2024.02.03 |
[HackerRank] Bigger is Greater 파이썬 (0) | 2024.02.03 |