https://school.programmers.co.kr/learn/courses/30/lessons/155652
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드
def solution(s, skip, index):
answer = ''
# 1. 사용 가능한 알파벳 리스트 생성
alphabets = [chr(i) for i in range(ord('a'), ord('z') + 1)] # 알파벳 a-z
available = [char for char in alphabets if char not in skip] # skip 제외
# 2. 각 문자 변환
for char in s:
current_pos = available.index(char) # 현재 문자 위치
new_pos = (current_pos + index) % len(available) # index 만큼 이동 후 순환 처리
answer += available[new_pos] # 변환된 문자 추가
return answer
코드 해설
1. 알파벳 리스트 생성
alphabets = [chr(i) for i in range(ord('a'), ord('z') + 1)]
- ord('a')부터 ord('z')까지의 정수 값을 이용하여 'a'에서 'z'까지의 알파벳 리스트를 생성합니다.
- 예: ['a', 'b', 'c', ..., 'z']
2. skip에 포함된 알파벳 제외
available = [char for char in alphabets if char not in skip]
- alphabets에서 skip에 포함되지 않은 알파벳만 선택하여 available 리스트를 생성합니다.
- 예: alphabets = ['a', 'b', 'c', ..., 'z']
- skip = "wbqd"
- available = ['a', 'c', 'e', ..., 'z'] (w, b, q, d가 제외됨)
3. 문자 변환
for char in s:
current_pos = available.index(char) # 현재 위치
new_pos = (current_pos + index) % len(available) # index만큼 이동
answer += available[new_pos] # 변환된 문자 추가
- 문자열 s의 각 문자를 처리:
- 현재 문자 위치:
- available.index(char): char의 현재 위치를 구함.
- 새로운 위치 계산:
- (current_pos + index) % len(available): 알파벳을 index만큼 뒤로 이동, z를 넘어가면 다시 a로 돌아감.
- 변환된 문자 추가:
- 새로운 위치의 문자를 answer에 추가.
- 현재 문자 위치:
4. 최종 결과 반환
return answer
- 변환이 완료된 문자열을 반환.
입출력 예제 분석
예제 1
- 입력: s = "aukks", skip = "wbqd", index = 5
- 과정:
- available = ['a', 'c', 'e', 'f', 'g', 'h', ..., 'z']
- s의 각 문자 변환:
- 'a' → 'h' (a에서 5번째 → h)
- 'u' → 'a' (u에서 5번째 → a)
- 'k' → 'p' (k에서 5번째 → p)
- 'k' → 'p' (k에서 5번째 → p)
- 's' → 'y' (s에서 5번째 → y)
- 결과: "happy"
- 출력: "happy"
핵심 포인트
- 알파벳 리스트 생성 및 변환:
- ord와 chr를 활용하여 알파벳 리스트를 생성하고, skip에 포함되지 않은 알파벳만 사용.
- 순환 이동:
- (current_pos + index) % len(available)로 알파벳이 끝을 넘어갈 경우 순환 처리.
- 알고리즘:
- 문자열 순회 및 변환에 O(n) (n: 문자열 길이).
- available.index는 O(1)로, 전체 시간 복잡도는 O(n).
문제의 출제 의도
- 문자열 처리와 반복 이동:
- 주어진 규칙에 따라 문자열을 변환하는 문제로, Python의 문자열 관련 함수를 잘 활용하는 것이 중요.
- 리스트 활용 및 효율성 고려:
- 알파벳 리스트 생성, 순환 이동, 특정 조건에 따른 제외 처리 등 리스트 조작 능력을 테스트.
관련 문법
- ord, chr:
- 문자를 아스키 코드와 정수 값으로 상호 변환.
- 리스트 내포:
- [char for char in alphabets if char not in skip]
- 모듈 연산:
- (current_pos + index) % len(available)로 순환 이동 처리.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 | Python | 완전탐색 | 피로도 (Lv.2) (0) | 2025.03.02 |
---|---|
프로그래머스 | Python | Greedy | 문자열 나누기 (Lv.1) (0) | 2025.03.02 |
프로그래머스 | Python | Hash, Greedy | 대충 만든 자판 (Lv.1) (0) | 2025.02.27 |
프로그래머스 | Python | Brute Froce | [PCCE 기출문제] 9번 / 이웃한 칸 (Lv.1) (0) | 2025.02.27 |
프로그래머스 | Python | 그리디 | 체육복 (Lv.1) (0) | 2025.02.27 |