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

Gaanii·2025년 3월 11일
1

Problem Solving

목록 보기
178/210
post-thumbnail

아래 프로그래머스 로고를 클릭하면 해당 문제로 이동합니다 😀

프로그래머스로고



풀이과정


뭐야 ? 순열 쓰면 되잖아 ? 해서 itertools.permutations를 이용하면 예시코드는 당연히 되지만 아무래도 .. 모든 조합을 다 계산하기때문에 시간 복잡도적으로 너무 나쁘다. 제출시에도 막힌다 ...

입력받은 숫자 리스트를 sorted를 이용해서 정렬을 하면 되는데, 두번째 입출력 예시인 [3, 30, 34, 5, 9] ➡️ "9534330"를 보자.

정렬은 [9, 5, 34, 3, 30]으로 되어야하는데 그냥 sort를 쓰면 [9, 5, 34, 30, 3]으로 정렬된다.

앞자리가 3인 3, 30, 34와 같이 앞의 숫자만을 보고 정렬 기준을 정할 수 없기 때문에 다음과 같은 방법을 사용한다.

  • sorted(num, key = lambda x:x*3, reverse=True)
  • 이를 이용하면 3 ➡️ 333, 30 ➡️ 303030, 34 ➡️ 343434가 된다.
  • 그러면 둘째, 셋째 자리수도 비교해서 정렬할 수 있다.

추가로, 입력값이 [0, 0, 0, 0] 같이 0만 나오면 join을 거치고 나서 값이 0000이 나온다. 이 경우를 탈출하기 위해 str(int(answer))을 이용하면 된다.


코드


def solution(numbers):
    answer = ''
    num = list(map(str, numbers))
    
    # s = sorted(num, reverse=True)
    s = sorted(num,key=lambda x: x*3,reverse=True)
    answer += ''.join(s)
    return str(int(answer))

print(solution([6, 10, 2]))
print(solution([3, 30, 34, 5, 9]))


결과


정답

2개의 댓글

comment-user-thumbnail
2025년 3월 12일

허걱 파이썬으로 코테 준비하시는군요!
저는 JS로하지만 담에 기회되면 같이 해요!ㅎㅎ🤭

1개의 답글