[구현] 08.문자열 재정렬 (유형별 기출문제, 이것이 코딩테스트다 with 파이썬)
구현 개념
머릿속에 있는 알고리즘을 정확하고 빠르게 프로그램으로 작성하는 것
동일한 알고리즘이면 더 간결하고 효율적인 코드가 잘 작성된 코드
아이디어 떠올리는 것과 별개로 구현 능력은 실무에서도 매우 중요
유형
완전 탐색
- 모든 경우의 수를 빠짐없이 다 계산하는 해결 방법
- 모든 경우의 수를 다 계산
- 반복문 혹은 재귀 함수를 적절히 사용하여 예외 케이스 모두 확인
- 일반적으로 DFS/BFS 알고리즘 이용
시뮬레이션
- 문제에서 제시하는 논리나 동작 과정을 그대로 코드로 옮겨야 하는 유형
- 완전 탐색과 해결 방법 비슷, 복잡한 구현 요구사항을 그대로 코드로 작성
원소를 나열하는 모든 경우의 수를 고려해야 하는 상황에서 보통 순열이나 조합 라이브러리 사용
→ 파이썬 표준 라이브러리 itertools로 쉽게 구현
문제
해설
요구하는 내용을 그대로 구현하면 되는 문제
각 문자를 확인하여, 숫자인 경우 따로 합계 계산, 알파벳인 경우 별도의 리스트에 저장
결과적으로 리스트에 저장된 알파벳들을 정렬해 출력, 합계를 뒤에 붙여서 출력하면 정답 판정
풀이
data = input()
result = []
value = 0
# 문자를 하나씩 확인하며
for x in data:
# 알파벳인 경우 결과 리스트에 삽입
if x.isalpha():
result.append(x)
# 숫자는 따로 더하기
else:
value += int(x)
# 알파벳을 오름차순으로 정렬
result.sort()
# 숫자가 하나라도 존재하는 경우 가장 뒤에 삽입
if value != 0:
result.append(str(value))
# 최종 결과 출력(리스트를 문자열로 변환하여 출력)
print(''.join(result))
해석
변수 : 입력 문자열 data, 출력할 결과(초반 알파벳) result, data의 숫자 합 value, data의 각각 x
1. 입력 문자열 data 입력받기
2. 출력할 결과 result, data의 숫자합 value 초기화
---------------------------- 반복문 : data 각각 x 확인 -----------------------------
3. 조건문 : 알파벳 여부 확인 : x.isalpha()
ㄴ 알파벳이면 result에 담기
ㄴ 아니면 value에 int형으로 바꿔 더하기
---------------------------------------------------------------------------------------------
4. result의 알파벳 오름차순 정렬 # 알파벳도 정렬 가능!
5. 숫자 존재하면 result의 가장 뒤에 str형으로 바꿔 append
6. 결과 출력