Algorithm/프로그래머스

[프로그래머스>Lv1] 둘만의 암호 - kotlin & python

RIEN😚 2023. 2. 3. 17:07
728x90
반응형
 

프로그래머스

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

programmers.co.kr

 

1. 문제

[입력]

두 문자열 s와 skip

자연수 index

 

- 문자열 s의 각 알파벳을 index 만큼 뒤의 알파벳으로 바꿔줍니다.

- index만큼 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.

- skip 안에 있는 알파벳을 제외하고 건너뜁니다.

 

[출력]

위 규칙대로 s를 변환한 결과를 return

 

2. 풀이

이 문제에서 가장 중요한 점은 제한 사항에 나와있는

🌹 skip에 포함되는 알파벳은 s에 포함되지 않습니다.

이 부분입니다.

 

때문에

a ~ z 중에서 skip에 나온 알파벳을 제외하고나서 계산할 수 있는 이유입니다.

 

3. 코드

kotlin
class Solution {
    fun solution(s: String, skip: String, index: Int): String {
        var answer: String = ""
        val skipped = skip.map { it.toChar() }
        val alphabet = ('a'..'z').filter { it !in skipped }

        s.forEach {
            val i = (alphabet.indexOf(it) + index) % alphabet.size
            answer += alphabet[i]
        }
        return answer
    }
}

 

python
def solution(s, skip, index):
    answer = ''
    
    skip = [ord(x) for x in skip]
    alphabet = [x for x in range(ord('a'),ord('z')+1) if x not in skip]
    size = len(alphabet)
    
    for i in s:
        pos = (alphabet.index(ord(i)) + index) % size
        answer += chr(alphabet[pos])
        
    return answer

 

반응형