문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/155652
처음 작성한 코드
- 제외한 문자를 건너뛰고 문자를 뒤로 밀기 위해 index 함수를 이용하였다.
- 알파벳 리스트를 생성해 준다. 물론 이러한 상수는 저런 코드로 생성하고 코드에 올리는 게 더 좋다.
- 알파벳 리스트에서 skip에 해당되는 알파벳들을 제외해준다.
- 암호문의 각 문자들을 가져와 alp_lst에 해당되는 index를 찾고 주어진 값만큼 뒤로 밀어낸다.
- index 값을 가져와 주어진 값만큼 추가하고 alp_lst의 길이만큼 나누어 주면 순환구조가 된다.
- 이 값을 alp_lst의 index로 사용하면 원하는 문자를 얻게 된다.
- 이렇게 변환한 문자열을 반환하면 해독된 문자열이 나온다.
def solution(s, skip, index):
alp_lst = [chr(i) for i in range(97, 123)]
answer = ''
for i in skip:
alp_lst.remove(i)
alp_len = len(alp_lst)
for j in s:
answer += alp_lst[(alp_lst.index(j) + index) % alp_len]
return answer
다른 코드
[코드1]
- 딕셔너러를 이용하여 문제를 푼 방법이다.
- string 라이브러리에서 ascii_lowercase를 가져옴으로써 a부터 z까지의 리스트를 받을 수 있다...!
- set 함수를 이용해 집합자료형으로 변환하여 중복을 없애고 skip의 문자들을 제외한다.
- 정렬을 통해 알파벳의 순서를 맞춘다.
- 컴프리헨션을 통해 딕셔너리로 변환시켜 준다. Key는 알파벳, value는 순서가 된다.
- 딕셔너리로 index를 미리 지정해 주었기 때문에 index 함수를 사용하여 매번 서치 하지 않아도 몇 번째 위치인지 알아낼 수 있다.
def solution(s, skip, index):
result = ''
alp_lst = set(ascii_lowercase)
alp_lst -= set(skip)
alp_lst = sorted(alp_lst)
alp_len = len(alp_lst)
alp_dic = {alpha: idx for idx, alpha in enumerate(alp_lst)}
for i in s:
result += alp_lst[(alp_dic[i] + index) % alp_len]
return result
index 함수의 호출을 줄이는 것으로 리소스 사용을 줄이는 장점이 있다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Programmers][Python] 공원 산책 (0) | 2023.03.27 |
---|---|
[Programmers][Python] 당구 연습 (0) | 2023.03.23 |
[Programmers][Python] 덧칠하기 (0) | 2023.03.21 |
[Programmers][Python] 옹알이 (2) (0) | 2023.03.13 |
[Programmers][Python] 크기가 작은 부분 문자열 (0) | 2023.03.10 |