둘만의 암호 - 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])
문제의 의도대로 풀면 이렇게 푸는게 아닐까 싶습니다.
'공부 > 📝 프로그래머스' 카테고리의 다른 글
체육복 - 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 |