Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Kaggle
- 백준
- SW Expert Academy
- 프로그래머스 파이썬
- programmers
- ubuntu
- 코로나19
- 우분투
- Baekjoon
- 편스토랑 우승상품
- leetcode
- github
- 파이썬
- dacon
- 금융문자분석경진대회
- ChatGPT
- 데이콘
- 맥북
- 편스토랑
- gs25
- AI 경진대회
- 자연어처리
- Git
- hackerrank
- Real or Not? NLP with Disaster Tweets
- Docker
- 프로그래머스
- 더현대서울 맛집
- PYTHON
- 캐치카페
Archives
- Today
- Total
솜씨좋은장씨
[Programmers] 둘만의 암호 (Python) 본문
728x90
반응형
코딩 1일 1문제! 오늘의 문제는 백준의 둘만의 암호 입니다.
👨🏻💻 문제 풀이
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
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 27433번 : 팩토리얼 2 (Python) (0) | 2023.02.06 |
---|---|
[BaekJoon] 25775번 : Letter Frequency (Python) (0) | 2023.02.05 |
[BaekJoon] 27324번 : ゾロ目 (Same Numbers) (Python) (0) | 2023.02.03 |
[BaekJoon] 27331번 : 2 桁の整数 (Two-digit Integer) (Python) (0) | 2023.02.02 |
[BaekJoon] 27323번 : 長方形 (Rectangle) (Python) (0) | 2023.02.01 |
Comments