본문 바로가기
코딩테스트/파이썬

[프로그래머스/파이썬] 가장 큰 수 풀이 (Python, sort)

by JI NY 2025. 2. 20.

[프로그래머스/파이썬] 가장 큰 수 풀이

(Python, sort)

 

 

1. 문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

2. 코드

def solution(numbers):
    answer = ''
    
    # 1. 사전 값으로 정렬한다.
    numbers_str = list(map(str,numbers))
    numbers_str.sort(reverse=True)
    numbers_str.sort(key=lambda num: num*3, reverse = True) # str에 3을 곱한 값으로 재정렬한다.
    # print(numbers_str)
    
    answer = str(int(''.join(numbers_str)))
    # 만약 numbers =[0,0] 이라면, 0이 나와야 한다.
    # 즉, str만 join하면 00 이런식으로 나오기 때문에, int로 바꿔준 후 str로 다시 바꿔준다.
        
    return answer

 

 

3. 풀이

1. numbers를 문자열 배열로 형변환합니다.

 numbers_str = list(map(str,numbers))

 

 

2. 사전순으로 우선 내림차순 정렬합니다. 

 numbers_str.sort(reverse=True)

- 결과 : ['9', '5', '34', '30', '3'] (이 상태에서, 30과 3은 위치가 바뀌어야 합니다. )

 

 

3. 문자열 원소*3을 하여 내림차순 정렬해 줍니다.

numbers_str.sort(key=lambda num: num*3, reverse = Tru

3.1. numbers의 원소는 0~1000 이하이기 때문에, 각 문자열 *3을 해줍니다.

 - 결과 : ['999', '5555, '343434', '303030', '333'] 

 

3.2. 그러면 위의 배열에서 사전순으로 큰 숫자가 앞으로 우선적으로 오게 됩니다. 

- 결과 : ['9', '5', '34', '3' ,'30' ]

 

 

4. 결과 배열을 'join'함수를 이용하여 한번에 합쳐줍니다. 

4.1. 이때, numbers가 [0,0]이라면, '00'과 같이 합쳐지기 때문에, int로 형변환해 준 후 다시 str로 형변환해 줍니다. 

 answer = str(int(''.join(numbers_str)))

 

 


4. 마무리

약 1시간 동안 숫자%10을 이용한 정렬로 풀다가, 결국 풀이를 보고 문제를 해결했습니다.

문자*3을 하는 로직을 스스로 생각해 내신 분들은 정말 대단한 것 같아요.

더 분발해야겠습니다..!🥹

 

- 참고 풀이 : https://velog.io/@insutance/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Python-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%88%98 

 

[프로그래머스][Python] 가장 큰 수

프로그래머스 '가장 큰 수' 문제 풀이

velog.io

 

댓글