반응형
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42746
문제 해결 방법(시간 초과)
1. 먼저 리스트에 정수가 있으므로 문자형으로 바꾸어준다.
2. 모든 가능한 조합을 만든 후에 가장 큰 수를 출력한다.
from itertools import permutations
def solution(num):
permute = list(permutations(num,len(num)))
list_permute = [''.join(map(str,i)) for i in permute]
answer = max(list_permute)
return answer
위의 방법은 매우 간단하게 생각할 수 있지만, 해당 방법은 시간 초과가 나므로 다른 방법을 생각해야했다.
문제 해결 방법(통과)
1. 먼저 리스트에 정수가 있으므로 문자형으로 바꾸어준다.
2. 각 리스트의 원소에 3을 곱한 값으로 내림차순으로 정렬한다. (lambda 함수를 통해 실제 값을 바꾸지는 않음)
3. 다시 정수형으로 바꾸어 변환한 후에 문자형으로 변경하여 출력한다.
코드
1
2
3
4
5
6
7
|
def solution(numbers):
str_numbers = [str(_) for _ in numbers]
str_numbers.sort(key=lambda num: num*3, reverse=True)
answer = str(int(''.join(str_numbers)))
return answer
|
cs |
이번 문제의 Key Point
먼저, 3을 곱하는 이유는 2번째 예시를 보고 알아채야한다.
계산할 때 앞의 값을 보고 정렬을 한다면 [9, 5, 34, 30, 3] 이렇게 정렬된다. 하지만 더 큰 수가 되기 위해서는 3이 30보다 앞에 있어야한다.
number는 최대 1000 이하의 숫자이므로 최대값을 생각해 3을 곱해주고, 3을 곱하게 되면 [999, 555, 343434, 303030, 333]이 되고, 정렬을 하게 되면 [999, 555, 343434, 333, 303030]이 된다.
lambda 함수를 이용해서 정렬을 해주었고, 정렬된 숫자, "9534330" 을 출력해줄 수 있다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 - 파이썬 풀이 (0) | 2022.04.29 |
---|---|
[프로그래머스][2022 카카오 블라인드 테스트] 신고 결과 받기 - 파이썬 풀이 (0) | 2022.04.26 |
[프로그래머스] 모의고사(level 1) 파이썬 문제 풀이 (0) | 2021.08.23 |
[프로그래머스] 베스트앨범(level 3) Python 문제 풀이 (0) | 2021.07.30 |
[프로그래머스] K번째수(level 1) Python 문제 풀이 (0) | 2021.07.17 |
댓글