알고리즘 풀이
[알고리즘] 프로그래머스 | 둘만의 암호
째깍단
2023. 8. 18. 08:53
둘만의 암호
답:
더보기
from string import ascii_lowercase
alpha = list(ascii_lowercase) #아스키코드로 alphabet 배열 만들기
def solution(s, skip, index):
answer = ''
for sk in skip:
alpha.remove(sk)
for str_s in s:
idx_s = alpha.index(str_s)
answer += alpha[(idx_s + index) % len(alpha)]
return answer
문제 분석 및 해석
주어지는 문자열을 규칙에 따라 변환하기
1. s에서 index만큼 뒤에 있는 알파벳을 찾아 길이 만큼 answer에 더해주기
2. 26개 넘으면 a로 돌아가서 더 세기
3. skip의 알파벳은 제외합니다
skip에 있는 문자열을 빼고 세기.
"알파벳"모두 변경하기
>> 풀이생각
알파벳 배열을 만들어준다
알파벳 배열에서 skip을 제거, len으로 index값을 % 나눠 나머지를 찾는다.
s의 개별 문자의 index값을 찾고 해당 index값에 나머지 찾기 <- 2번 작업하겠는걸?
나머지 자리에 있는 알파벳을 answer에 더해준다.
모든 알파벳이 바뀔 때까지 반복.
from string import ascii_lowercase
alpha = list(ascii_lowercase) #아스키코드로 alphabet 배열 만들기
알파벳 배열을 편하게 만들 수 있는 방법!
아스키 코드를 활용한다.
과정1.
#1 알파벳 배열에 skip의 요소가 있으면 제거.
#2 일단 주어진 index값과 alpha값을 나누어 나머지를 구하는 식을 작성해두었다 = 바꾸어야하는 문자의 index
def solution(s, skip, index):
answer = ''
#1
for sk in skip:
if sk in alpha: #이거 필요한가?
alpha.remove(sk)
#2
len_alpha = len(alpha)
index = index % len_alpha
replace로 s값을 바로 바꾸어 return하려 했지만..
answer에 +하여 return하는것이 cost가 덜 들 것이라는 생각이 들어 방법을 변경하였다.
#3
for str_s in s:
idx_s = alpha.index(str_s)
answer += alpha[(idx_s + index) % len(alpha)]
return answer
이후 풀이에서 필요없는 #1의 if문과 #2를 제거하여 리팩터링하였다.
알파벳 배열 만들기 힘들어서 찾아보니 역시 방법이 있었다:)
익혀둬야지!