[Programmers] 가장 큰 수

hodu·2022년 10월 20일
0

algorithm

목록 보기
15/27

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

이번 문제도 순열과 조합을 이용하여 풀려고 했으나, 지난번 문제처럼 함정이 있을 것 같아서 노선을 틀었다.
가장 처음 문제를 보며 생각했던 것은

6과 10을 어떻게 비교해 줄 것인가?

였다.

그래서 뒤에다 (4자리를 기준으로)0을 붙여 보았다.
6000 > 1000 이므로 6이 더 커지는 것을 확인할 수 있었으나,
30과 3을 비교했을 때는 문제가 생겼다.
3000 == 3000

3에게 우선순위를 줘야 하는 알고리즘을 만들어야했는데,
이 부분을 구현하는게 어려워서 그냥 똑같은 숫자를 4자리를 기준으로 반복하기로 했다.

(맞는지는 정확하게 모르겠어서 일단 구현해 보았음)

30과 3을 비교하면
3030 < 3333 이므로 3이 더 커지는 것을 확인할 수 있었다.

주요 알고리즘은 위를 통해 구현하였다.

그럼 코드를 확인해보자.

def solution(numbers):
    k = []
    answer = ''
    numbers = list(map(str, numbers))

    for i in numbers:
        k.append([int((i*4)[:4]),i])

    k.sort(reverse=True)

    for j in k:
        answer += j[1]

    return str(int(answer))

k라는 배열에다가 같은 수를 4자리까지 반복했고,
뒤에다가는 원래 배열의 값을 리스트 형태로 넣어주었다.

그럼 아래와 같은 값이 나온다.
[[6666, '6'], [1010, '10'], [2222, '2']]
내용을 입력하세요.
리스트의 정렬은 앞의 값을 기준으로 정렬되므로 건드려줄 것이 없었으며

마지막으로 answer에다가 정렬한 값의 j[1]번째 값, 즉 원래 값을 넣어주었다.

근데 테스트 11번을 통과하지 못해서 찾아보았더니
[0, 0, 0, 0, 0]을 넣으면 0이 아닌 00000이 나오는 것이었다.

그래서 마지막에 int형으로 바꿔준 다음, 다시 str로 변환하여 return 해주었다.

profile
안녕 세계!

0개의 댓글