둘만의 암호(프로그래머스) with python

binslog·2023년 2월 24일
0

https://school.programmers.co.kr/learn/courses/30/lessons/155652



def solution(s, skip, index):
    result = []

    for word in list(s) :
        word_cnt = ord(word)

        for i in range(1,index+1):            
            if word_cnt >= 122 : 
                word_cnt -= 26

            if chr(word_cnt+i) in list(skip) : 
                word_cnt += 1

        word_cnt += index
                            
        if word_cnt >= 122 : 
            word_cnt -= 26
            
        result.append(chr(word_cnt))
            
            
    # print(result)

    answer = ''.join(s for s in result)
    
    return answer

s = 'zzxas'
skip = 'wbqd'
index = 5

res = solution(s,skip,index)
print(res)

처음 푸려고 했던 미련한 방식
chr과 ord를 이용하려 했으나 오류가 났고, 구글링을 통해서 index와 나머지를 활용해서 최적화를 하는 방법을 찾았다.

def solution (s,skip,index):
    answer =""
    idx=0
    alphabet = "abcdefghijklmnopqrstuvwxyz"

    for ch1 in skip:
        if ch1 in alphabet:
            alphabet = alphabet.replace(ch1,"")
    print(alphabet)

    for ch2 in s :
        idx = (alphabet.index(ch2) + index) % len(alphabet)

        print(alphabet.index(ch2), idx)

        answer += alphabet[idx]

    return answer

s,skip,index = 'aukks','wbqd',5
res = solution(s,skip,index)
print(res)
  1. 소문자만 사용하기 때문에 하드코딩 해버린다.
  2. replace와 index를 적절히 활용.
  3. 나머지를 이용해서 알파벳의 범위를 벗어나는 걸 컨트롤 해준다.

자주 쓰일 것 같으므로 익혀두자!

profile
개발자가 될 수 있을것인가?

0개의 댓글