관리 메뉴

솜씨좋은장씨

[Programmers] 둘만의 암호 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 둘만의 암호 (Python)

솜씨좋은장씨 2023. 2. 4. 17:34
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 둘만의 암호 입니다.

 

프로그래머스

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

programmers.co.kr

👨🏻‍💻 문제 풀이

1. chr 과 ord 를 활용하여 알파벳 소문자 리스트 생성 ( 그런데 skip 을 곁들인 )

def get_skip_alphabet_list(skip):
    return [chr(alpha_num) for alpha_num in range(ord('a'), ord('z') + 1) if chr(alpha_num) not in skip]

가장 먼저 알파벳을 아스키 코드로 변환해주는 ord 와 아스키 코드를 문자로 변환해주는 chr 을 활용하여

알파벳 소문자 리스트를 생성해줍니다.

ord('a') 부터 ord('z') 까지의 숫자를 range 로 리스트로 만든 다음 하나씩 꺼내온 값을

chr을 활용하여 알파벳으로 변환하여 만들어주었습니다.

 

여기서 저는 입력받은 skip 을 활용하여 skip 할 알파벳을 제외한 알파벳 리스트를 생성하였습니다.

2. 알파벳을 skip 할 알파벳을 제외하고 index 만큼 shift 를 하는 함수 작성

def shift_alphabet(alphabet, index, skip_alphabet_list):
    skip_alpha_len = len(skip_alphabet_list)
    return skip_alphabet_list[(skip_alphabet_list.index(alphabet) + index) % skip_alpha_len]

1번 함수로 만든 알파벳 리스트에서

현재 알파벳 인덱스 값 + index 값을 전체 알파벳 리스트 길이로 나눈 나머지 값 위치의 알파벳을 꺼내오도록 하였습니다.

나눈 나머지 값을 쓴 이유는 z 까지 갔을때 다시 맨 앞으로 돌아오도록 하기 위함 입니다.

3. 1번과 2번을 활용하여 정답 solution 함수 작성

def solution(s, skip, index):    
    alphabet_list = get_skip_alphabet_list(skip)
    
    shift_s = "".join([
        shift_alphabet(alphabet, index, alphabet_list) for alphabet in list(s)
    ])
    
    return shift_s

1번에서 만든 알파벳 생성 함수와 shift 함수를 활용하여 정답 solution 함수를 작성하였습니다.

- skip 을 활용하여 특정 알파벳을 제외한 알파벳 리스트를 생성한 다음

- 입력 받은 문자열에서 알파벳을 하나씩 꺼내와서 2번에서 만든 shift 함수를 활용하여 shift 한 알파벳을 만들고

- 이렇게 만들어진 리스트를 join 하여 다시 정답 문자열로 만들어주면 끝!

 

전체 코드는 아래를 참고해주세요!

👨🏻‍💻 코드 ( Solution )

def get_skip_alphabet_list(skip):
    return [chr(alpha_num) for alpha_num in range(ord('a'), ord('z') + 1) if chr(alpha_num) not in skip]


def shift_alphabet(alphabet, index, skip_alphabet_list):
    skip_alpha_len = len(skip_alphabet_list)
    return skip_alphabet_list[(skip_alphabet_list.index(alphabet) + index) % skip_alpha_len]
    

def solution(s, skip, index):    
    alphabet_list = get_skip_alphabet_list(skip)
    
    shift_s = "".join([
        shift_alphabet(alphabet, index, alphabet_list) for alphabet in list(s)
    ])
    
    return shift_s
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments