Programming/알고리즘 & 코테

[구현] 08.문자열 재정렬 (유형별 기출문제, 이것이 코딩테스트다 with 파이썬)

kk_______yy 2024. 1. 22. 14:55

구현 개념

머릿속에 있는 알고리즘을 정확하고 빠르게 프로그램으로 작성하는 것

동일한 알고리즘이면 더 간결하고 효율적인 코드가 잘 작성된 코드

아이디어 떠올리는 것과 별개로 구현 능력은 실무에서도 매우 중요

 

유형

완전 탐색

  • 모든 경우의 수를 빠짐없이 다 계산하는 해결 방법
  • 모든 경우의 수를 다 계산
  • 반복문 혹은 재귀 함수를 적절히 사용하여 예외 케이스 모두 확인
  • 일반적으로 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. 결과 출력