본문 바로가기
알고리즘

[알고리즘] 문자열 재정렬

by Eric_K 2021. 4. 2.
문제 설명
알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이 때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 모든 숫자를 더한 값을 이어서 출력합니다.
예를 들어, K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.
풀이

문제를 보고 처음 떠오른 아이디어는 받은 문자열을 배열로 만들어, [0]부터 아스키 코드 값을 이용해서 문자열을 재구성하는 방법이었다.

 

A ~ Z의 아스키 코드 값 범위가 65 ~ 90이므로 해당 배열의 아스키 코드 값이 범위 안에 포함된다면, 알파벳 배열에 넣어주고, 그렇지 않다면 숫자이므로 int 변수에 더해준다. 여기서, 아스키 코드값으로 변환시켜주는 파이썬 내장함수로 ord(c)가 사용된다.

받은 문자열에 대해 알파벳과 숫자별로 처리가 끝났으면, 알파벳 List를 sort()함수를 이용해서 오름차순으로 정렬한 뒤

숫자부를 해당 List에 append하여 출력해주면 된다.

 

strs = input()
alphaList = []
value = 0

for i in range(len(strs)) :
     if(65 <= ord(strs[i]) <= 90) :  // 자바와 다르게 파이썬은 a < n < b 식의 범위 표현이 가능하다.
        alphaList.append(strs[i])
     else:
        value += int(strs[i])

alphaList.sort()

if(value > 0) :
   alphaList.append(str(value))

print(''.join(alphaList))

알파벳 여부 판별은 내장함수 isalpha()를 사용해서도 할 수 있다.

만약 문제에 소문자까지 추가되어 대문자와 구분해야한다면, isupper(), islower()도 활용할 수 있겠다.

 

for i in range(len(strs)) :
     if(strs[i].isalpha()) :
        alphaList.append(strs[i])
     else :
        value += int(strs[i])

댓글