알파벳 한 글자씩 주어진 인덱스만큼 다음 알파벳으로 넘어가는데 다만 skip 내에 있는 알파벳일땐 세는 것에 포함시키지 않고 건너뛴다.
일단 방문하면 건너뛰어야 할 skip에 있는 알파벳을 이용해 참거짓 리스트를 만들어준다.(False로 초기화해주고 건너뛰어야 할 알파벳들의 인덱스에서는 True로 바꿔준다)
만약 현재 알파벳이 참거짓 리스트에서 True일때는 인덱스를 삭감하지 않고 다음 알파벳으로 넘어가고 False라면 인덱스를 삭감하고 다음 알파벳으로 넘어간다.
이 과정을 한 글자당 인덱스가 0이 될 때까지 반복해주면 된다.
def solution(s, skip, index):
answer = ""
unavailable = [False] * (ord("z") + 1)
for i in range(len(skip)): unavailable[ord(skip[i])] = True
for i in range(len(s)):
idx = ord(s[i])
add = index
while add > 0:
if idx == ord("z"):
if unavailable[ord("a")]: idx = ord("a")
else:
idx = ord("a")
add -= 1
else:
if unavailable[idx + 1]: idx += 1
else:
idx += 1
add -= 1
answer += chr(idx)
return answer
자바를 요새 많이 하다 보니까 자꾸 알파벳을 int로 씌어주면 아스키 코드에 해당하는 숫자로 바뀌겠지라고 생각해 틀렸었다.... 그 전에 ord()를 배웠음에도 말이다.....
ord() -> 알파벳을 해당 아스키 코드의 숫자로 변환
chr() -> 아스키 코드에 해당하는 알파벳으로 변환