- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

Lv2 문제이고, 풀다풀다 답 찾아본 문제이다!

 

디버깅을 통해서 내림차순으로 정렬하면 대충 원하는 순서대로 숫자들이 정렬된다. 근데 예제에서 30과 3을 나열하는 거는 정답을 만족하지 못해서 이를 해결할 방법이 필요했다. 

 

찾아보니 세자리 수 이상으로 자릿수를 맞추어 아스키 코드에 따라 정렬하는 방법이 있다.

numbers의 원소들은 1000이하 이므로, 4자리 수라면 1000 밖에 없고, 그 외에는 최대 3자리 수밖에 안된다. 그렇기 때문에 

네번재 자릿수부터의 수로 인한 정렬의 변화는 의미가 없다.(네번째 자릿수가 정렬에 영향을 미친다는 것은 세번째 자릿수까지의 수가 서로 같다는 뜻인데, 이 때는 실제로 둘 다 같은 수 취급이므로 어떻게 정렬되든 상관이 없기 때문이다.)

 

- 정답 풀이 :

def solution(numbers):
    answer = ''
    
    numbers = list(map(str, numbers))
    #이렇게 하면 3은 333으로, 30은 303030으로 3 30 순서로 정렬된다
    numbers.sort(key = lambda x: x*3, reverse = True)

	# 00, 000 같은 경우를 해결하기 위해 형변환
    return str(int(''.join(numbers)))

 

 

- 시도해본 풀이 :

 

딱 1 / 3 테스트 성공한 풀이다. 

이 경우에 [3, 30, 34, 5, 9]의 경우 9534303을 출력해서 정답인 9534330과 다르게 출력되어 틀린다

3과 30인 경우를 어떻게 해야하나 고민이 되었다

def solution(numbers):
    
    for i in range(len(numbers)):
        numbers[i] = str(numbers[i])
        
    numbers.sort(reverse = True)
    print(numbers)
    
    return ''.join(numbers)

+ Recent posts