서론
구현 3번째 문제이다. 이번 문제는 문자열을 정렬하는건데, 문자열 다루는 코딩테스트 문제는 대표적으로 카카오 계열에서 많이나온다고 한다.
본론
머릿속으로 생각해보면 전혀 어려워보이지 않는다.
def stringSort(S):
slist = list(S)
num_sum = 0
asci_list = list(map(lambda x: ord(x), slist))
asci_list.sort()
new_list =[]
for index,sub_s in enumerate(asci_list):
if ord('1') <= sub_s <= ord('9'):
num_sum += int(chr(sub_s))
else:
new_list = asci_list[index:]
break
new_list = list(map(lambda x: chr(x), new_list))
new_list.append(str(num_sum))
return ''.join(new_list)
print(stringSort('K1KA5CB7'))
실수한점: 숫자를 0으로 정의하는 바람에 오류가 날 가능성이 매우 높다.
개선할점: 처음부터 다 sort하기 전에 구분하고 sort하는것이 시간 효율성이 더 높을것이다.
모범답안
def stringSort_dongbinna(S):
slist = list(S)
num_sum = 0
new_list =[]
for x in slist:
if x.isalpha():
new_list.append(x)
else:
num_sum +=int(x)
new_list.sort()
if num_sum !=0:
new_list.append(str(num_sum))
return ''.join(new_list)
print(stringSort_dongbinna('K1KA5CB7'))
배운점
.isalpha()
를 사용하면 숫자인지 아닌지 확인할 수 있다.- 예외가 있을거를 꼭 생각하자.
- 문자열을 sort해도 알파벳순서대로 정렬 해준다.
마무리
시간을 이상한데 너무 많이 썼으며 여유가 된다면 꼭 반례가 있을거를 생각하자.
또한, 아래 꿀팁 함수들을 이용하자.
isalpha()
문자열이 문자인지 아닌지를 True/False로 리턴
isdigit()
문자열이 숫자인지 아닌지를 True/False로 리턴
isspace()
문자열이 공백인지 아닌지를 True/False로 리턴
'Algorithm > Problem Solving' 카테고리의 다른 글
[한개라도 제대로] DFS&BFS(1) - 백준 2178번 미로 탐색 (0) | 2022.02.01 |
---|---|
[한개라도 제대로] 구현(2) (0) | 2022.01.09 |
[하나라도 제대로] 구현(1) (0) | 2022.01.09 |
[하나라도 제대로] 그리디알고리즘(3) (0) | 2022.01.07 |
[하나라도 제대로] 그리디알고리즘(2) (0) | 2022.01.06 |