강의로 돌아가기
KKam99

[python] 정답주의!!! 전체적인 설명 + 테스트 케이스 11번

문제의 핵심은 4자리까지 반복하는 것입니다.
예를 들어 3 일 경우 3333, 30일 경우 3030, 303일 경우 3033으로 만드는게 중요합니다.
정렬을 위해 배열에 넣을 때 4자리로 맞춰진 숫자를 문자열로 변경해서 넣으면
정렬 결과대로 문자열에 집어 넣기만 하면 됩니다.
(문자열 정렬은 숫자 크기 비교가 아니라 앞에서부터 순서대로 비교합니다. '9' > '34' )

저도 테스트 케이스 11번만 틀렸었는데 보니까 전체 합이 0일 때 '0000'으로 출력하게 되면 틀리더라구요
이 부분만 코드 마지막에 추가했습니다.
많은 도움이 되면 좋겠네요

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(numbers):
    answer = ''
    sum_ = 0
    tmp = []
    for number in numbers:
        c = (str(number) * 4)[:4]
        length = len(str(number))
        tmp.append((c, length))
    tmp.sort(reverse=True)
    for (c, length) in tmp:
        sum_ += int(c)
        if sum_ == 0:
            return '0'
        answer += c[:length]
    return answer
  • youngjun0313

    4자리까지 반복하는 이유를 정확히 알 수 있을까요? 저는 4자리를 채울 때 맨앞에 수를 계속 붙이는 방식으로 생각했는데, 틀린것 같더라구요. 예를들어 30이면 3033, 41이면 4144이런식으로요. 왜 순화되게 4자리를 만들어야 하는지 잘 모르겠습니다.

    youngjun0313―2022.03.08 00:26
  • KKam99

    정렬결과를 항상 원하는대로 보장하기 위해서 입니다. 303, 30 일 경우 30330 이 가장 크게 만들 수 있는 숫자인데 말씀하신 방식으로 하면 3033, 3033 으로 같아집니다. 그럼 어떻게 정렬하셨는지는 모르겠지만 순서가 바뀌기도 합니다. 문득 기억이 안나긴 했는데 저도 이런 경우 때문에 3030, 3033 으로 항상 정렬 결과를 303이 앞서게 하기 위해 반복을 했던 것 같습니다.

    KKam99―2022.03.08 01:03
1 개의 답변
조민규

1,2,3,4 숫자가 모두 12의 약수라는 점을 잘 활용한 코드군요 많은도움되었습니다

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.