코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 1 둘만의 암호

_알파카 2024. 7. 31. 17:38
728x90

문제 설명

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

 

프로그래머스

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

programmers.co.kr

 

내 풀이

def solution(s, skip, index):
    answer = ''
    # 알파벳 리스트
    alphabets = ["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"]
    
    # skip에 있는 단어 포함 X
    for i in skip:
        alphabets.remove(i)
    
    # 문자열을 index 만큼 더해서 새로운 문자로 변경
    # z를 넘어갈 경우 a로 돌아가므로, len(alphabets) 나머지 연산 진행
    for j in s:
        tmp = alphabets[(alphabets.index(j) + index) % len(alphabets)]
        answer += tmp

    return answer

 

먼저, 기본적인 알파벳 리스트를 만들었다. 

아스키 코드를 이용해서 풀까도 고민했지만, 소문자만 다루기 때문에 복잡하게 아스키 코드를 다루는 것보다는

단순히 배열을 만들어 풀어도 된다 판단하였다. 

 

이 후, 기본 알파벳 리스트에서 skip 안에 있는 단어를 제거한다. 

이 제거된 리스트를 바탕으로 s 문자열의 단어에서 index 만큼 더한 새로운 문자를 얻어낸다. 

 

이 때, 주의할 점은 z를 넘어갈 경우 a로 다시 돌아가야한다는 것인데, 

이는  나머지 연산(%)을 통해 해결하였다. 

 

 

아래는 알파벳 문자열을 사용해 푼 풀이이다. 

def solution(s, skip, index):
    alpha = "abcdefghijklmnopqrstuvwxyz"
    answer = ""
    for i in list(skip):
        alpha = alpha.replace(i,"")
        
    for a in s:
        answer += alpha[(alpha.find(a) + index) % len(alpha)]
    return answer

 

728x90