알고리즘/이코테 알고리즘 유형별 기출문제

[구현] 이코테 (파이썬) 문자열 재정렬 풀이

개발윗미 2021. 8. 18. 18:56

[문제]

알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여

 

이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.

 

예를 들어 K1KA5CB7 이라는 값이 들어오면 ABCKK13을 출력합니다.

 

[입력 조건]

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

 

[출력 조건]

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

<입력 예시 1>
K1KA5CB7
<출력 예시 1>
ABCKK13

<입력 예시 2>
AJKDLSI412K4JSJ9D
<출력 예시2>
ADDIJJJKKLSS20

 

[내 풀이]

s = input()
number = 0
al = []
for i in range(len(s)) :
  if(65 <= int(ord(s[i])) <= 90 ) :
    al.append(s[i])
  else :
    number += int(s[i])

al.sort()
al.append(str(number))

print(''.join(al))

 

이 문제를 해결하기 위해서는 입력받은 문자열에서 알파벳 따로 숫자 따로 저장하여 처리한 후 최종적으로 합치면 된다.

 

반복문을 통해 입력받은 문자열에서 문자를 하나씩 확인해나가면서 수행한다.

 

만약 문자열에서 해당 문자가 아스키 코드 값으로 변환한 후 정수형으로 나타내는 값이 65('A') ~ 90('Z') 범위 내에

 

존재한다면 알파벳 대문자이기 때문에 al 리스트에 삽입한다.

 

반대로 그렇지 않다면 숫자이기 때문에 정수형으로 변환한 후 변수 number에 누적해나간다.

 

반복문이 끝나면 알파벳 대문자가 모여져 있는 리스트를 오름차순으로 정렬한 후 누적이 모두 완료된 number 값을 문자열로

 

변환한 후 al 리스트에 삽입한다.

 

최종적으로 리스트 형식으로 구성되어 있는 al을 join( ) 함수를 통해 문자열로 변환하여 출력한다.

 

< 참고 >

  * join( ) 함수는 매개변수로 들어온 리스트에 있는 요소들을 합쳐서 하나의 문자열로 변환하는 함수이다.

 

      ==> 사용 방식 : '구분자'.join(리스트)

 

  * 위와 같은 코드처럼 아스키 코드 값으로 변환한 후 그 값이 알파벳 아스키 코드 범위 내에 있는지 확인하는 방법 

 

      외에도 isalpha( ) 함수를 통해 알파벳인지 확인하여 수행할 수 있다.

 


출처

이것이 코딩 테스트다 with 파이썬 - 나동빈 저