[이것이 코딩테스트다] Chapter12. Q8 문자열 재정렬
본 포스팅의 해설과 코드는 '이것이 코딩테스트다' 책의 문제와 해설을 보고 본인의 방식으로 풀어쓴 것입니다.
문제
알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력한다.
예시
K1KA5CB7
값이 입력으로 주어지면ABCKK13
을 출력한다.입력 조건
- 첫째 줄에 하나의 문자열 S가 주어집니다.
(1<=S의 길이<=10,000)
.출력 조건
- 첫째 줄에 문제에서 요구하는 정답을 출력합니다.
이 문제는 요구하는 내용을 그대로 구현하면 된다. 문자열이 입력되었을 때 문자를 하나씩 확인한 뒤에, 숫자인 경우 따로 합계를 계산하고, 알파벳인 경우 별도의 리스트에 저장한다. 결과적으로 리스트에 저장된 알파벳들을 정렬해서 출력하고 합계를 뒤에 붙여서 출력한다.
data = input()
s_list = []
value = 0
for x in data:
if x.isalpha():
s_list.append(x)
else:
value+=int(x)
s_list.sort()
if sum!=0:
s_list.append(str(value))
print("".join(s_list))
isalpha()
: 문자열이 전부 알파벳이면 True를 반환한다. 숫자나 공백이 포함되어 있으면 False를 반환한다.'구분자'.join(리스트)
: 리스트에 있는 요소를 구분자를 포함하여 문자열로 반환해준다.'_'.join(['a','b','c'])
==> return "a_b_c"
이 문제는 쉽게 해결이 가능했지만 알아둬야할 함수들이 쓰여서 상기하는 의미로 포스팅했다.
My solution
s = input()
s_list=[]
num_list=[]
for i in range(len(s)):
if ord(s[i])%48<10:
num_list.append(int(s[i]))
else:
s_list.append(s[i])
s_list.sort()
for a in s_list:
print(a, end="")
print(sum(num_list))
알파벳과 숫자를 구분하기 위한 방법으로 ord()
함수를 이용해 아스키코드로 변환하여 구분했다. '0'
이 아스키코드로 48
이기에 나머지계산하여 0~9
까지 숫자를 판별했다.