1 분 소요

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를 리턴

댓글남기기