[프로그래머스] 둘만의 암호 by 파이썬

진이·2023년 3월 9일
0

파이썬

목록 보기
5/7

문제 요약

알파벳 한 글자씩 주어진 인덱스만큼 다음 알파벳으로 넘어가는데 다만 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() -> 아스키 코드에 해당하는 알파벳으로 변환

profile
최선을 다할게

0개의 댓글