코딩문제풀이/프로그래머스

[Python] 가장 큰 수

코딩하는 포메라니안 2021. 8. 26. 22:44

1. 문제

 

 

 

2. 풀이 과정

개인적으로 테스트 케이스들을 생각해보는 게 알고리즘을 떠올리기가 좋았다.

 

[CASE1]

두 수 비교부터 생각해보면, [35, 3443]이 있다고 가정하자.

참고로, 숫자와 달리 문자열은 아스키코드에 따라 인덱스 0번째부터 비교해간다. 오름차순으로 정렬하면 [3443, 35]가 되며 큰 수부터 나열하면 정답인 "353443"을 반환한다.

 

[CASE2]

그러면 [34, 3421]인 경우를 생각해보자. 이미 정렬된 상태로 정답인 "343421"과 다른 "342134"를 반환한다. 여기 문제는 34의 자릿수가 적어서 발생한다. 문자열 정렬과 위 문제는 이 부분에서 차이가 난다.

 

결론

CASE1)처럼 자릿수가 끝나기 전에 그 자릿수까지의 숫자가 달라서 정렬이 되면 상관없지만, 그 자릿수까지 같으면 없는 자릿수는 패턴으로 비교해야 한다. [3434, 3421]을 비교해야 된다는 것이다.

해당 자릿수까지 같은 수가 있을 때 그 뒷자리까지 비교되므로, 같은 수인 지점까지 뒤에 복사해서 붙여주는 것이다. 즉,  34 + 3421이 클지 3421 + 34가 클지 비교하는 것과 같다.

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers = sorted(numbers, key = lambda x:(x*4)[:4], reverse = True)
        
    answer = ''.join(numbers)
        
    #"0000" => 숫자로는 "0"
    if answer[0] == "0":
        answer = "0"
    
    return answer

'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글

[Python] 소수 찾기  (0) 2021.08.27
[Python] H-Index  (0) 2021.08.27
[Python] 더 맵게  (1) 2021.08.26
[Python] 주식 가격  (0) 2021.08.26
[Python] 다리를 지나는 트럭  (0) 2021.08.25