일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- map
- 알고리즘
- 파이썬
- sql오답노트
- 안드류응
- coursera
- 머신러닝
- 코세라강의
- POP
- WHERE
- orderby
- PYTHON
- DATE_FORMAT
- groupby
- SQL공부
- 프로그래머스SQL
- sorted
- 코세라머신러닝
- programmers
- 머신러닝강의
- Andrew NG
- 코세라
- 인프런sql강의
- 프로그래머스
- Machine Learning
- 경제공부
- sql
- 코세라머신러닝강의
- mysql
- Algorithm
Archives
- Today
- Total
미래를 예측하는 데이터분석가
[Programmers] 프로그래머스 가장 큰 수 lv.2 본문
문제 설명 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
- 조건
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다. 3.정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
모든 테스트를 통과한 풀이답안
def solution(numbers):
numbers = list(map(str,numbers))
numbers.sort(key = lambda x : x*3,reverse=True)
return str(int(''.join(numbers)))
permutation(조합)으로 접근하다 시간초과로 sort와 lambda를 이용해서 풀어야겠다는 생각을 했다. 하지만 그 이상으로 생각이 나지않아 다른 코드 풀이를 참고하였고... 정말 wow 놀라움을 금치 못했다. 왜 난 생각을 못했을까? 싶을정도로 간단하지만 아이디어가 너무 좋았다!(그게 센스라고 생각한다) 숫자를 반복해 길게 늘리고 str을 적용해 내림차순하여 가장 큰 수를 만들어냈다.
내가 실패한 코드
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
조합을 이용한다는 접근은 좋았으니 모든 수를 다 적용해 비교한다는 점에서 시간초과가 되었다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Programmers] 프로그래머스 lv.2 다리를 지나는 트럭 (0) | 2021.02.10 |
---|---|
[Programmers] 프로그래머스 lv.2 위장 (0) | 2021.02.09 |
[Programmers] 프로그래머스 프린터 lv.2 (0) | 2021.02.07 |
[Programmers] 프로그래머스 더 맵게 lv.2 (0) | 2021.02.05 |
[Programmers] 프로그래머스 lv.1 최대공약수와 최소공배수 (0) | 2021.02.04 |