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