programmingu

[프로그래머스/코딩연습/정렬]가장 큰 수 (파이썬) 친절한 풀이 본문

coding test practice

[프로그래머스/코딩연습/정렬]가장 큰 수 (파이썬) 친절한 풀이

예진잉구 2021. 2. 4. 23:32
def solution(numbers): # 옳은 풀이
    str_num = list(map(str, numbers))
    str_num.sort(key=lambda x: x*3,reverse = True)
    return str(int("".join(str_num)))

def solution2(numbers): # 잘못된 풀이
    numbers_str = list(map(str,numbers))
    check = [False] * len(numbers)
    L =[]
    ans = ['']*len(numbers)

    def dfs(idx):
        if idx == len(numbers):
            L.append(''.join(ans))
            return

        else:
            for i in range(len(numbers)):
                if check[i] == True:
                    continue
                else:
                    ans[idx] = numbers_str[i]
                    check[i] = True
                    dfs(idx+1)
                    check[i] = False

    dfs(0)
    L = list(map(int,L))
    answer = str(max(L))
    return answer
​

 

저는 예전에 급하게 코테 연습할 때 풀다가 스트레스 받아서... pass 한 문제였어요 ㅋㅋ

아이패드 사서 공부하는데 쓰면서 어떻게 생각했는지, 순서대로 정리하면서 차근차근 풀어봤어요

그 때는 풀이 봐도 이해도 안되고 마음이 급해서.. ㅜㅜ 힘들었는데 지금은 모르는 것들도 정확히 찾아보면서 풀었어요.

정리한 것들이 저처럼 답답했던 사람들에게 도움이 되길 바라면서 필기본 올려요!

 

제가 처음에 틀렸던 이유도 적어놨어요. 모든 경우의 수를 다 따져보는 dfs 방식으로 풀었는데, complexity가 커서 그런지 runtime error가 발생해서.. 그냥 넘어갔던 기억이 나네요. 이 문제처럼 list 길이가 100000개..! 처럼 너무 경우의 수가 많으면 dfs 방식을 쓰면 안됩니당.

그 코드도 참고로 올려봤어요.