프로그래머스 - 가장 큰 수

So,Soon·2020년 5월 8일
0
post-custom-banner

https://programmers.co.kr/learn/courses/30/lessons/42746

접근

뻘짓 대잔치 였던 문제

의식의 흐름대로 풀다보니 비교함수는 하드코딩 스타일이 되었습니다.

결국 해답을 찾긴 했지만, 조금 더 신중하고 , 개괄적으로 생각해야 될 것 같습니다.

자꾸 정렬같은 문제를 풀 때 , 모든 케이스를 고려하려고 하는 버릇이 있는데

그렇게 하다보면 계속 하나씩 조건이 추가되며 모든 케이스를 고려 할 수 없을 가능성이 높습니다.

그보다 전체를 관통하는 알고리즘을 생각해보는 것이 좋으며,

이 문제는 간단하게 a ,b를 비교했을때 둘 중 누구에게 우선순위를 주어야 하는가로 좁혀질 수 있습니다.

조금만 고민해보면 맨 앞자리에 따라 소팅을 해야하는건 발견하기 쉽습니다.

하지만 예제에서 말해주듯이 3과 30을 비교하면 3이 우선이 되어야합니다.

이유는 330이 303보다 크기 때문이죠...

이 부분을 어떻게 처리하느냐가 관건인것 같은데 겹치는 부분을 제외한 부분이 겹치는 부분과 크냐,작냐 이런식으로 비교해보려 했던 것 같습니다.

그냥 두개를 a+b , b+a로 합쳐본 뒤 크기 비교를 하면 끝났을 것을..

코드 전문입니다..ㅠ

from functools import cmp_to_key
def compare(x,y):
    t1 = int(x+y)
    t2 = int(y+x)

    if t1 > t2:
        return -1
    elif t1 < t2:
        return 1
    else : return 0



def solution(numbers):
    answer = ''
    for i in range(len(numbers)):
        numbers[i] = str(numbers[i])


    numbers.sort(key = cmp_to_key(compare))
    answer = ''.join(numbers)
    s = 0
    for i in range(len(answer)):
        if answer[i] == '0':
            s += 1
        else:
            break
    if s != 0:
        answer = answer[s - 1:]

    return answer
profile
iOS Software Engineer, Audio Software Engineer, SKKU Computer Science, Business Administration
post-custom-banner

0개의 댓글