해결 과정
1. x만 비교함
2. 1, 10, 100이 나오는 경우 1, 10, 100순으로 바꿔줬어야 했음. -> ljust로 했는데 오답. 힌트 보니 그 문자열을 반복해야 한다며
3. 테스트 케이스 11번 오류. 힌트 보니 0으로만 이루어진 문자열 -> 0으로 바꿔줘야 함.
나의 풀이
def solution(numbers):
numbers = list(map(lambda x: str(x), numbers))
numbers = sorted(numbers, key=lambda x: len(x))
# numbers = sorted(numbers, key=lambda x: x.ljust(4, "0"), reverse=True)
numbers = sorted(numbers, key=lambda x: x*3, reverse=True)
answer = ''
for i in numbers:
answer += i
if "0"*len(answer) == answer:
return "0"
return answer
다른 풀이
제일 많이 푼 풀이방법, x*3만 해주면 됨 (IDEA)
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
아예 비교해보고 정렬
import functools
def comparator(a,b):
t1 = a+b
t2 = b+a
return (int(t1) > int(t2)) - (int(t1) < int(t2)) # t1이 크다면 1 // t2가 크다면 -1 // 같으면 0
def solution(numbers):
n = [str(x) for x in numbers]
n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
answer = str(int(''.join(n)))
return answer
IDEA
문자열 비교는 첫 자리 수부터 차례대로 비교함
문자열 붙이기 (.join) str.join(numbers)
특별한 한 개의 예외 케이스를 처리해줘야 하는 경우 (여기선 "0000" -> "0" ) IDEA) int로 바꿔주면 0000은 자동으로 0이됨.
'Coding Test > 문제 풀이' 카테고리의 다른 글
[Algorithm] 소수 찾기 (0) | 2021.12.30 |
---|---|
[Algorithm] 모의고사 (0) | 2021.12.30 |
[Algorithm] K번째수 (0) | 2021.12.29 |
[Algorithm] 전화번호 목록 (0) | 2021.12.29 |
[Algorithm] 완주하지 못한 선수 (0) | 2021.12.29 |