새소식

⌨️ Algorithms/프로그래머스

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

2022. 8. 18. 19:10

  • -

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

"""
입출력 예시)

numbers = [6, 10, 2] -> "6210"
numbers = [3, 30, 34, 5, 9] -> "9534330"
"""

from itertools import permutations

def solution(numbers):
    permu = list(map(''.join, permutations(map(str, numbers)))) # permutations 쓸 때 숫자의 경우, map(str, 리스트)가 추가로 들어가야 함
    answer = max(permu)
    return answer

 

-> '너무 간단하게 풀리는 문제 아닌가...?!' 라며 자신있게 제출했지만 추가된 테스트 케이스들에서 시간 초과로 틀림...

 

 

 

 

  • 통과한 코드 
def solution(numbers):
    numbers = list(map(str,numbers)) # int를 str으로 변환
    numbers.sort(key = lambda x : x*3, reverse=True) # str으로 변환된 숫자들을 3번 반복한 값을 기준으로 내림차순 정렬
    return str(int(''.join(numbers)))

 

-> sort(key= ) 이용

 

 

  • list.sort()
    • 원본 리스트 자체를 정렬
    • sort()한 리스트를 다른 객체로 선언하면 None을 반환 
    • -> sort()한 후, 원본 리스트 자체를 불러와야 정렬된 리스트가 반환됨
    • key 매개 변수를 가짐 
# 원본 리스트 불러오기
a = [5, 2, 3, 1, 4]
a.sort()
a
# -> [1, 2, 3, 4, 5]

 

# 다른 객체로 선언 후 불러오기
a = [5, 2, 3, 1, 4]
b = a.sort()
print(b)
# -> None

 

 

  • lambda x : x*3의 의미
    • x가 int일 때 -> x에 3을 곱함
    • x가 str일 때 -> x를 3번 반복 (ex. 'xxx') 
# x가 int일 때 -> x에 3을 곱함
# list(range(5)) -> [0, 1, 2, 3, 4]
list(map(lambda x : x*3, range(5)))
# -> [0, 3, 6, 9, 12]

 

# x가 str일 때 -> x를 3번 반복
a = ['a', 'bc', 'def', 'g', 'hi', 'jkl', 'mnop']
list(map(lambda x : x*3, a))
# -> ['aaa', 'bcbcbc', 'defdefdef', 'ggg', 'hihihi', 'jkljkljkl', 'mnopmnopmnop']

 

 

  • x*3을 한 이유
    • '333'과 '303030' 중 문자열 정렬이기 때문에 '333'을 크다고 판단해야하기 때문 
    • 3보다 30을 더 큰 수라고 판단하면 결과가 '9534330'이 아닌 '9534303'이 되어버림
# str의 오름차순과 내림차순 비교 

n_str = ['3', '30']
n_str_lam = list(map(lambda x : x*3, n_str)) # -> ['333', '303030']

# reverse=False (오름차순)
sorted(n_str_lam)
# -> ['303030', '333']

# reverse=True (내림차순)
sorted(n_str_lam, reverse=True)
# -> ['333', '303030']

 

 

 

 

 

참고) 

 

https://velog.io/@falling_star3/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Level2-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%88%98 

 

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

https://programmers.co.kr/learn/courses/30/lessons/427460 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.예를 들어, 주어진 정수가 6, 10, 2라면 6102, 621

velog.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!