본문 바로가기

코딩테스트/👩‍💻 이코테

[이코테/구현] 문자열 재정렬

문제

알파벳과 숫자가 섞인 문자열을 입력받았을 떄 
문자는 오름차순정렬, 숫자는 모두 더해 문자열의 맨 끝에 출력하라

 

입출력예시

K1KA5CB7 ABCKK13

 

내가 쓴 답

s = list(input())
result=[]
sum=0
is_exist = False
for i in range(len(s)):
    if s[i].isnumeric() == True:
        if not is_exist:
            is_exist = True
        sum+=int(s[i]) 
    else:
        result.append(s[i])
result.sort() 

if is_exist:
    result.append(str(sum))

print(''.join(result))

 

풀이

로직 자체는 어렵지 않았는데 

리스트의 원소의 형태를 구별하는 과정이 필수적이었지만

파이썬에 익숙하지 않아 어떤 함수를 써야할지가 문제였다.

 

새롭게 알게 된 함수 

isnumeric() 숫자형태의 문자인지 확인 후 True/False 반환
isalpha() 알파벡인지 확인 후 True/False 반환
'',join() 리스트를 인자로 받아 ''로 연결해 문자열을 만들어 주는 함수

 

먼저 리스트로 입력을 받은 후 

리스트를 돌면서 원소가 문자면 결과값을 저장할 리스트 result에 담고, 

숫자면 sum이라는 새로운 변수에 값을 누적해서 더한다

그리고 for문 실행이 끝나면 result리스트를 오름차순 정렬하고(sort()사용)

만약 숫자가 있다면 result의 마지막에 추가, 

여기서 만약 숫자가 있는지 여부와 상관없이 추가하게 된다면 sum을 0으로 초기화 했기 때문에

숫자가 없을 떄도 문자열 마지막에 '0'이 붙을 것임

그리고 sum!=0 이면 추가하는 조건도 생각해봤는데

만약 입력값에 숫자가 0 하나만 있을 경우엔 출력을 해야하므로 

결국 숫자가 있는지 없는지 자체를 판단할 변수 is_exist를 만들었음

 

조건을 비교하고 join()을 사용해 reuslt리스트의 원소를 모두 문자열로 붙인 결과값 출력

 

 

참조

이것이 취업을 위한 코딩테스트다(with.파이썬)