Algorithm/Problem Solving

[한개라도 제대로] 구현(3)

Jinlib 2022. 1. 13. 21:29

서론

구현 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'))

배운점

  1. .isalpha()를 사용하면 숫자인지 아닌지 확인할 수 있다.
  2. 예외가 있을거를 꼭 생각하자.
  3. 문자열을 sort해도 알파벳순서대로 정렬 해준다.

마무리

시간을 이상한데 너무 많이 썼으며 여유가 된다면 꼭 반례가 있을거를 생각하자.
또한, 아래 꿀팁 함수들을 이용하자.

isalpha()

문자열이 문자인지 아닌지를 True/False로 리턴

isdigit()

문자열이 숫자인지 아닌지를 True/False로 리턴

isspace()

문자열이 공백인지 아닌지를 True/False로 리턴