코딩테스트/PYTHON
[프로그래머스][PYTHON] Lv. 1 둘만의 암호
_알파카
2024. 7. 31. 17:38
728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/155652
내 풀이
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