둘만의 암호 - Python

2024. 1. 31. 23:18공부/📝 프로그래머스

1. 풀이 코드

def solution(s, skip, index):
    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"]
    secret_alphabet = []
    skip_alphabet = []
    
    for item in skip:
        skip_alphabet.append(item)
        
    for item in alphabet:
        if item not in skip_alphabet:
            secret_alphabet.append(item)
    
    answer = ''
    for item in s:
        answer += secret_alphabet[(secret_alphabet.index(item) + index) % len(secret_alphabet)]
    
    return answer

  알파벳이 소문자밖에 없어 깔끔하게 노동을 했습니다.

 

2. 다른 사람 풀이 코드

from string import ascii_lowercase

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

    a_to_z = set(ascii_lowercase)
    a_to_z -= set(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

 set() 집합은 - 연산이 된다는걸 잊었네요.

 


def solution(s, skip, index):
    atoz = ['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 i in skip:
        atoz.remove(i)

    ans = ''
    for i in s:
        ans += atoz[(atoz.index(i)+index)%len(atoz)]

    return ans

  .remove()를 쓴다면 저처럼 별개의 리스트를 더 만들 필요가 없습니다.

 


def solution(s, skip, index):
    alphas = [chr(a) for a in range(ord("a"), ord("z")+1) if chr(a) not in skip]
    return "".join([alphas[(alphas.index(a) + index) % len(alphas)] for a in s])

  문제의 의도대로 풀면 이렇게 푸는게 아닐까 싶습니다.


 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

'공부 > 📝 프로그래머스' 카테고리의 다른 글

체육복 - Python  (0) 2024.11.22
옹알이 (2) - Python  (0) 2024.08.04
완주하지 못한 선수 - Python  (0) 2024.01.29
대충 만든 자판 - Python  (0) 2024.01.28
문자열 나누기 - Python  (0) 2024.01.27