코딩하면솔솔잠옴

[프로그래머스] Level1 둘만의 암호(Python) 본문

Programming/Programmers

[프로그래머스] Level1 둘만의 암호(Python)

솔s 2023. 2. 8. 22:38
반응형
SMALL

문제 설명

두 문자열 sskip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.

  • 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
  • index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
  • skip에 있는 알파벳은 제외하고 건너뜁니다.

예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.

두 문자열 sskip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 5 ≤ s의 길이 ≤ 50
  • 1 ≤ skip의 길이 ≤ 10
  • sskip은 알파벳 소문자로만 이루어져 있습니다.
  • skip에 포함되는 알파벳은 s에 포함되지 않습니다.
  • 1 ≤ index ≤ 20

입출력 예

s
skip
index
result
"aukks"
"wbqd"
5
"happy"
 

소스코드

def solution(s, skip, index):
    answer = ''
    a = "abcdefghijklmnopqrstuvwxyz"
    a = sorted(set(a) - set(skip))

    for i in s :
        answer += a[(a.index(i) + index) % len(a)]

    return answer

문제 풀이

  1. 입력 값이 소문자로만 이루어져 있기 때문에 a ~ z 까지의 알파벳을 변수에 할당해줌

2. set() 함수를 이용하여 skip의 단어를 빼준다.

그리고 set() 함수는 순서 없이 출력되기 때문에 sorted() 함수로 알파벳을 정렬해준다.

3. s의 문자열을 for문으로 하나씩 문자를 꺼내준다.

index() 함수를 이용하여 s 문자의 해당 위치를 찾고 + index를 해준다.

이때 s문자가 'z'의 값을 넘어가버리는 경우를 방지하기 위하여 a~z까지 들어있는 리스트의 나눈 나머지 값을 인덱스 값

으로 넣어 문자열에 추가해준다.

 


 

처음 접근법은 이중 for 문으로 skip의 문자를 하나씩 비교하여 리턴 값을 만들어줄까라는 생각을 하였다.

근데 더 간단한 방법이 있을 거 같은데...라는 생각을 가지고 고민을 더 해보았다.

이때 skip을 제외한 a ~ z의 소문자만 들어있는 리스트를 만들면 인덱스 고민도 많이 필요 없이 쉽게 해당 문자들을 찾을 수 있겠는데?라는 생각을 하고 코드 짜기를 시작!

처음 코드를 돌렸을 때 런타임 에러 4개가 발생했다!!!

이유가 멀까.. 질문 목록에 힌트가 있을까 싶어 들어가 보았는데 "인덱스를 더했을 때 알파벳 길이를 넘는 경우가 한 번이 아닐 수 있다"라는 나에게 필요한 해답이 있었다.

이것을 보고 해당 부분을 고쳐보니 문제를 해결을 했다ㅎ :)

반응형
LIST
Comments