자료구조 및 알고리즘/프로그래머스

프로그래머스 - 둘만의 암호 (파이썬)

viamemine 2024. 4. 11. 18:04
728x90
반응형

 


💬 내가 작성한 python 코드 (잘못된 코드 = 78.9/100) → 테스트 케이스가 많이 맞지 않음

def solution(s, skip, index):
    answer = ''

    for i in s: # str에서 한글자씩 i가 됨
        
        new_list = []; cnt = 0; alpha = 1
        while len(new_list) < index:
            if ord('z') < ord(i)+alpha:  # z 넘어가면 다시 a로 돌아오기
                if chr(ord(i)-26+alpha) in skip: # skip 제외하기
                    cnt += 1
                    alpha += 1
                    
                else:
                    new_list.append(chr(ord(i)-26+alpha))
                    alpha += 1
            else: 
                if chr(ord(i)+alpha) in skip: # skip 제외하기
                    cnt += 1
                    alpha += 1
                else:
                    new_list.append(chr(ord(i)+alpha))
                    alpha += 1
        
        answer += new_list[-1]

    return answer

 


💬 다시 작성한 python 코드

def solution(s, skip, index):
    alpha = "abcdefghijklmnopqrstuvwxyz"
    answer = ""
    for i in list(skip):
        alpha = alpha.replace(i,"")
        
    for a in s: # index만큼 뒤로 미루고, alpha 길이를 벗어나면(z)면 a로 돌아가게끔 % 처리 
        answer += alpha[(alpha.find(a) + index) % len(alpha)]
    return answer

 


💬 다른 사람이 작성한 코드

from string import ascii_lowercase

def solution(s, skip, index):
    result = ''
    
    a_to_z = set(ascii_lowercase) # set으로 만들고
    a_to_z -= set(skip) # skip 삭제
    a_to_z = sorted(a_to_z)
    l = len(a_to_z)

    dic_alpha = {alpha:idx for idx, alpha in enumerate(a_to_z)}

    for i in s:
        result += a_to_z[(dic_alpha[i] + index) % l]

    return result

 


 

나는 아스키 코드로 처리해보려고 했으나, 

string을 만들어서 처리하면 더 빠르고 정확한 처리가 가능하다는 것을 배웠다.

 

또, set에서는 -=로 원소 삭제가 가능하다는 것도 처음 알았다.

 

나도 코딩 머신 되고싶다 ... ~~~ 

 

 

 

728x90