[구현] 08 문자열 재정렬
08 문자열 재정렬
구현이란?
- 머릿속에 있는 알고리즘을 정확하고 빠르게 프로그램으로 작성하는 과정
- 간결하고 효율적으로 코드를 작성해보자
- 구현 내 알고리즘 문제 유형
- 완전 탐색 유형: 모든 경우의 수를 계산
- 반복문, 재귀 함수를 사용하여 예외 케이스 모두 확인해야한다.
- 순열, 조합: 표준 라이브러리 itertools 사용
- 시물레이션 유형: 문제에서 제시하는 논리나 동작 과정을 그대로 코드로 옮기기
- 복잡한 구현 요구 사항을 그대로 코드로 옮겨야한다.
- 완전 탐색 유형: 모든 경우의 수를 계산
문제
알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.
입력 조건
- 첫째 줄에 하나의 문자열 S가 주어집니다. (1 ≤ S의 길이 ≤ 10,000)
출력 조건
- 첫째 줄에 문제에서 요구하는 정답을 출력합니다.
입력 예시
K1KA5CB7
출력 예시
ABCKK13
사고 과정
- n을 문자 리스트로 변환한 후 정렬해준다.
-
내림차순으로 정수가 앞에오고 문자가 뒤에 온다.
K1KA5CB7
n [‘1’, ‘5’, ‘7’, ‘A’, ‘B’, ‘C’, ‘K’, ‘K’]
-
- n 리스트의 원소들을 정수로 바꾸는데 에러가 발생하지 않으면 정수 리스트에, 에러가 발생하면 문자열 리스트에 담는다.
- 출력: 문자열+정수합
풀이
나의 코드
n = list(input())
n.sort()
int_list = []
str_list = []
for i in range(len(n)):
try:
int(n[i])
int_list.append(int(n[i]))
except:
str_list.append(n[i])
continue
print("".join(str_list)+str(sum(int_list)))
책의 코드
n = list(input())
n.sort()
int_value = 0
result= []
for i in n:
# 알파벳인 경우 결과 리스트에 삽입
if i.isalpha():
result.append(i)
# 숫자는 따로 더하기
else:
int_value += int(i)
# 알파벳 오름차순으로 정렬
str_list.sort()
if int_value != 0:
result.append(str(int_value))
print(''.join(result))
사고 과정 흐름을 공식화하자
- isalpha()
- 문자열의 구성이 알파벳인지에 대해서 확인하는 함수
- 단, 문자열에 숫자 및 공백이 포함되어 있으면 False를 리턴
- isdigit()
- 숫자인지 확인
- isalnum()
- 알파벳 또는 숫자인지 확인
- 단, 문자열에 숫자 및 공백, 특수문자가 포함되어 있으면 False를 리턴
댓글남기기