[Programmers] 가장 큰 수

yunan·2020년 9월 16일
0
post-thumbnail

🔦 문제 링크

✍️ 나의 풀이


  • 해당 블로그를 참고했다.

  • 조합

    • 가장 생각하기 쉬운 방법은 모든 조합 중 가장 큰 값을 고르는 것이다.
    • 하지만 무려 O(10000!)의 시간이 걸리므로 불가능하다.
  • 어떻게하면 쉽게 적게 비교할 수 있을까?

    • 방법은 문자열을 조작하는 것이다!
    • 파이썬은 sorted()로 문자열을 정렬 시 맨 앞의 문자 순으로 정렬한다.
      • 예를 들어 '2323','243' 이면 '243'이 큰 수이다.
    • 이를 이용하는 코드를 설계해야 한다.
  • 주의사항

    • 자릿수만 맞춰주기 위해 0만 가져다 붙여서는 안된다.

      • '12','121' -> '1200' , '1210' 이된다.
      • 이때 결과는 12112가 나오게 되는데 이는 오답이다.
      • '1212','1211' 을 통해 올바른 값을 구해야 한다.
    • int(str(문자열)) 의 이유는 00000으로 바꿔주기 위함이다.

🛠 나의 코드



# 블로그를 참고한 풀이
def solution(numbers):
    li = []
    for nu in numbers:
        s = str(nu)
        nu = list(s)
        i = 0
        while len(nu) <= 4:
            nu.append(nu[i])
            i = (i+1) % len(s)
        nu = int("".join(nu))
        li.append([nu,s])
    li=sorted(li,reverse=True)
    print(int("".join([ i[1] for i in li ])))
    return str(int("".join([ i[1] for i in li ])))

✍️ 다른 사람 풀이


  • 파이썬스럽다.
  • 오류의 범위에 대한 이해도가 높은 것 같다. (문자열이 4자리 넘어가도 됨)
  • for문 대신 map을 사용해 str으로 변환 했다.
  • (문자열 * n)n 만큼 같은 문자열을 반복한 문자열이다.

🛠 다른 사람 코드


def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

📝 정리


  • 문자열을 곱하면 반복할 수 있다.
  • 문제를 잘 읽자.
profile
Go Go

0개의 댓글