일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- lateinit
- 코틀린 람다함수
- 코틀린 data class
- class
- 코틀린 lateinit
- kotlin listview
- Kotlin
- 코틀린 내부 클래스
- Kotlin Generic
- add view
- 프로그래머스 #탐욕법 #큰수만들기 #join #python
- 객체의 동일성
- 내용의동일성
- kotlin collection
- 카카오 순위검색
- 코틀린
- 코틀린 중첩클래스
- 코틀린 컬렉션함수
- 해시
- kotlin recyclerview
- 프로그래머스
- 컬렉션함수
- collection function
- 코틀린 문자열
- isNullOrBlank
- 컬렉션 함수
- programmers # 프로그래머스 #큰수비교 #cmp_to_key()
- kotlin addview
- kakao blind
- 코틀린 제너릭
- Today
- Total
엔지니어 규의 IT 프로그래밍 다이어리
프로그래머스 : 정렬 - 가장큰수 본문
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
풀이 1
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x * 3, reverse=True)
return str(int(''.join(numbers)))
|
cs |
1. list(map(str,numbers)) 를 이용해서 numbers 의 모든 원소를 str 로 바꿔준다.
2. 가장 핵심 idea 가 'key = lambda x: x*3' 의 역순으로 정렬하는것이다.
[3,30,34,5,9]를 (key = lambda x: x[0]) 으로 정렬하면 [9,5,34,30,3] 이 나온다.
하지만 30,3 을 정렬해야 할 필요가 있으므로 ['333','303030','343434','555','999'] 이런식으로 만든다.
3. 마지막에 ['0','0','0'] 같은경우 0이나와야 하므로 숫자로 바꾼후 다시 str 로 바꾼다.
4. 문자열인 숫자를 정렬할때 숫자를 '크기'로 보지않고 '순서' 로 본다. 예를 들면 내림차순으로 정렬할때
'99' 가 '101' 보다 위에 있으며, '101' 보다 '10' 이 아래에 존재한다.
사실상 '구현' 보단 idea에 따른 풀이 이기 때문에 생각못한다면 다른 방식으로 구현할 수 있어야 한다.
풀이2
import functools
def comparator(a,b):
t1 = a+b
t2 = b+a
return (int(t1) > int(t2)) - (int(t1) < int(t2)) # t1이 크다면 1 // t2가 크다면 -1 // 같으면 0
def solution(numbers):
n = [str(x) for x in numbers]
n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
answer = str(int(''.join(n)))
return answer
|
cs |
python 조건 정렬 하기! cmp_to_key()
정렬과 관련된 문제를 풀다보면 특정 조건으로 정렬을 시켜야 하지만, 그게 잘 안될 때가 있다. 그러다 찾은 방식이 바로 cmp_to_key 를 이용하는 것이다.아래 설명은 내가 이해한 정도의 지나지 않
velog.io
cmp_to_key() 를 활용하는 방법이 있는데 이것 역시 해당 Tool 을 알아야 한다는 단점이 있다.
사실 완벽하게 이해를 하진 못한것같다.
'코딩테스트 > python' 카테고리의 다른 글
프로그래머스 : 스택/큐 - 올바른 괄호 (0) | 2023.01.20 |
---|---|
프로그래머스 : 해시 - 전화번호 목록 (0) | 2023.01.19 |
프로그래머스 : 완전탐색 - 소수찾기 (0) | 2023.01.19 |
프로그래머스 : 해시 - 완주하지 못한 선수 (0) | 2023.01.16 |
프로그래머스 : 탐욕법(Greedy) - 큰수만들기 (0) | 2023.01.14 |