[프로그래머스 Level2] 가장 큰 수 with 파이썬

Ian Choi·2021년 10월 16일
0

알고리즘

목록 보기
3/4

로고

문제

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

풀이

numbers 배열에 주어진 각 원소들을 붙혀서 가장 큰 수를 만드는 문제이다. 기본적으로 정수를 다루는 것처럼 보이지만 단순히 숫자를 붙히는 방법으로 해결해야 하기 때문에 문자열로 풀어야한다. 전체 원소들을 문자열로 만들어주고 적절한 방법으로 정렬한 다음에 숫자들을 붙혀서 출력하면 끝이다.

문제는 어떤식으로 정렬할 것이냐는 것이다. 첫 번째 예시를 단순하게 큰 순서대로 정렬하게 되면 [10, 6, 2]가 되어 1062 가 출력되게 되고 이것은 정답인 6210 보다 작은 수다. 다음 예시를 보면 더 힌트를 얻을 수 있다.

numbers = [3, 30, 34, 5, 9]

9와 5가 먼저 정렬돼야 하는 건 분명한데 3, 30, 34가 문제다. 3과 34를 비교해 보면 만들수 있는 수는 334 와 343이기 때문에 34가 먼저 정렬돼야한다. 반면 3과 30 은 330과 303을 만들 수 있기 때문에 3이 먼저 정렬돼야한다. 이걸 구현하기 위해서 어떤 방식으로 정렬을 시켜야 하는지 생각해보자.

정답은 최대자리까지 길게 늘어뜨려서 비교해보면 된다. 제한 조건을 보면 각 원소의 최대 길이는 4자리이다. 그렇다면 4자리까지 연속되도록 만들어놓고 비교해서 더 큰수가 먼저 오도록 정렬하면 가장 큰 수를 구할 수 있을 것이다. 무슨 뜻이냐면, 3을 4자리까지 연속시키면 3333이 되고, 30을 연속시키면 3030이 된다. 3333 > 3030 이기때문에 3이 30보다 먼저 정렬되어야 한다. 3333과 3434도 마찬가지로 비교된다. 이제 구현해보자.

코드

주의할 점

한가지 예외경우가 있다. 제한 사항을 보면 원소는 0이 될 수도 있다. 만약에 numbers 배열이 [0, 0, 0] 이런 식으로 0만 있다면 가장 큰 수는 000 이 아니고 0이다. 이걸 조건문을 통해 예외 처리 시키면 된다.

profile
신입 시스템 엔지니어

0개의 댓글