프로그래머스로 문제를 풀고 이를 회고하기 위해 글로 써본다
def solution(s, skip, index):
result = ''
alphabet = "abcdefghijklmnopqrstuvwxyz"
remaining_alphabet = [c for c in alphabet if c not in skip]
# alphabet = ["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"]
# for skip_a in skip :
# alphabet.remove(skip_a)
for sa in s :
if sa in remaining_alphabet :
index_in_remaining = (remaining_alphabet.index(sa) + index) % len(remaining_alphabet)
result += remaining_alphabet[index_in_remaining]
# if alphabet.index(sa) + index < len(alphabet) :
# result += alphabet[alphabet.index(sa) + index]
# else :
# result += alphabet[alphabet.index(sa) + index - len(alphabet)]
return result
위 코드에서 주석처리한 부분은 런타임 에러가 나기 이전에 작성했던 코드이다.
알파벳을 배열에 넣고 remove() 메서드로 skip에 해당하는 문자를 제거했다.
그리고 index값을 더했을 때 alphabet 배열보다 큰지 작은지 비교하여 그에 맞게 분기처리를 해주었다.
하지만 그 코드로 실행을 돌렸을 때 반례가 존재했고 이를 해결하기 위해
s문자열에 있는 각 문자의 index값과 입력받는 index값을 더한 값이 alphabet 배열 길이보다 클 때 len(alphabet)을 빼는것이 아닌 이 값으로 나눈 나머지로 해결하였다.