Problem Solving (PS)/이취코테
이취코테(구현 기초) - 문자열 재정렬 문제
ju_dev
2022. 10. 15. 02:35
문제.
알파벳 대문자와 숫자(0~9)로만 이루어진 문자열 s가 입력으로 주어진다.
모든 알파벳을 오름차순 정렬하여 이어서 출력하고, 그 뒤에 모든 숫자를 더한 값을 이어서 출력한다.
조건 : 1<= s의 길이 <=10000, 시간제한 1초
예시 입력)
AJKDLSI412KJ4JSJ9D
예시 출력)
ADDIJJJJKKLSS20
- 나의 풀이
s = list(input())
s.sort() # 숫자 -> 영어(대->소) 순으로 정렬
n_list = list(map(str, [i for i in range(10)])) # 0~9 숫자를 str로 저장
result = ""
for i in range(len(s)) :
if s[i] not in n_list : # s[i]가 알파벳이면 슬라이싱하고 break
num = s[:i]
string = s[i:]
break
num = list(map(int, num))
result = ''.join(string) + str(sum(num))
print(result)
10000개의 데이터에 대해 시간제한 1초 -> 대략 O(N^2) 이하의 알고리즘 선택해야함
조건문에서 탐색한 총 횟수 = (s에 있는 숫자의 개수+1) x 10, 슬라이싱 총 횟수 = 2 이므로
시간복잡도는 worst-case에도 O(n)을 보장한다.
주의 : 리스트 s는 숫자와 문자가 함께 str 자료형으로 존재하므로 모든 원소를 동시에 형 변환 할 수 없다.
-> 문자와 숫자를 나누어 슬라이싱 한 배열로 각각 나누어야 map()으로 모든 원소 형 변환 가능
팁 :
숫자와 알파벳이 복합적으로 존재하는 리스트에 sort()를 적용하면
숫자 -> 영어(대문자 -> 소문자) 순으로 정렬한다.
리스트를 문자열로 만드려면 아래와 같이 직접 구현해도 되지만 join()함수를 사용하면 손쉽게 만들 수 있다.
for j in range(len(string)) :
result += string[j]