얼음녹차의 블로그
article thumbnail

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/155652

 

프로그래머스

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

programmers.co.kr

 

처음 작성한 코드

  • 제외한 문자를 건너뛰고 문자를 뒤로 밀기 위해 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 함수의 호출을 줄이는 것으로 리소스 사용을 줄이는 장점이 있다.

profile

얼음녹차의 블로그

@PERIR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!