알고리즘 풀이

[알고리즘] 프로그래머스 | 둘만의 암호

째깍단 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를 제거하여 리팩터링하였다. 

 

 

 


알파벳 배열 만들기 힘들어서 찾아보니 역시 방법이 있었다:)

익혀둬야지!