[문제]
알파벳 대문자와 숫자(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 파이썬 - 나동빈 저
'알고리즘 > 이코테 알고리즘 유형별 기출문제' 카테고리의 다른 글
[정렬] 이코테 (파이썬) 안테나 풀이 (0) | 2021.12.06 |
---|---|
[정렬] 이코테 (파이썬) 국영수 풀이 (0) | 2021.12.06 |
[그리디] 이코테 (파이썬) 볼링공 고르기 풀이 (0) | 2021.09.28 |
[그리디] 이코테 (파이썬) 문자열 뒤집기 풀이 (0) | 2021.09.28 |
[그리디] 이코테 (파이썬) 만들 수 없는 금액 풀이 (0) | 2021.09.28 |