[Algorithm] 문자열 재정렬

최승표·2022년 2월 1일
0

Algorithm

목록 보기
4/8


[이것이 코딩테스트다] Chapter12. Q8 문자열 재정렬

본 포스팅의 해설과 코드는 '이것이 코딩테스트다' 책의 문제와 해설을 보고 본인의 방식으로 풀어쓴 것입니다.

문제
알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력한다.


예시
K1KA5CB7 값이 입력으로 주어지면 ABCKK13을 출력한다.

입력 조건

  • 첫째 줄에 하나의 문자열 S가 주어집니다.(1<=S의 길이<=10,000).

출력 조건

  • 첫째 줄에 문제에서 요구하는 정답을 출력합니다.


Problem Solving

 이 문제는 요구하는 내용을 그대로 구현하면 된다. 문자열이 입력되었을 때 문자를 하나씩 확인한 뒤에, 숫자인 경우 따로 합계를 계산하고, 알파벳인 경우 별도의 리스트에 저장한다. 결과적으로 리스트에 저장된 알파벳들을 정렬해서 출력하고 합계를 뒤에 붙여서 출력한다.

Python Code

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"


Discussion

이 문제는 쉽게 해결이 가능했지만 알아둬야할 함수들이 쓰여서 상기하는 의미로 포스팅했다.

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까지 숫자를 판별했다.



References

  • 나동빈, ⌜이것이 취업을 위한 코딩테스트다 with Python⌟, 한빛미디어, 2020, p.322
profile
"계속해서, 될 때까지" AI Engineer

0개의 댓글