일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- counter
- 완전탐색
- mysql
- cte
- BFS
- itertools
- 코딩테스트
- Stack
- 코딩
- 데이터분석
- lv4
- level4
- Queue
- 코테
- lambda
- Level2
- coding
- 연습문제
- sql
- programmers
- time complexity
- 프로그래머스
- join
- coding test
- 조합
- python
- import re
- collections
- 파이썬
- 시간복잡도
- Today
- Total
ror_coding
[Programmers] 가장 큰 수 - 42746 본문
728x90
728x90
lstrip과 lambda x : x*3 이용하기 !
제한 사항을 잘 읽고 활용하여 풀자.
Question
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
Point
- 제한 사항에서 numbers의 원소가 1000이하이기 때문에 문자열에 *3을 곱해서 모든 수가 4자리 이상이 되게 만듦.
- 이를 비교하여 역순으로 정렬하면 답으로 붙일 원소로 나열됨.
- 이 원소들을 string type으로 만든 값이 '0'으로 시작할 수 있기 때문에 lstrip 해줌.
- (이때 모든 수가 0이라면 '' (빈 문자열)이 되기 때문에 '0'을 return 해줌.
Code : After
def solution(numbers):
answer = ''.join(sorted([str(i) for i in numbers], key = lambda x : x*4, reverse = True))
return answer if len(answer)!=answer.count('0') else '0'
Code : Before
def solution(numbers):
numbers = sorted([str(n) for n in numbers], key = lambda x : x*3, reverse=True)
return (''.join(numbers)).lstrip('0') if (''.join(numbers)).lstrip('0')!='' else '0'
# return str(int(''.join(numbers)))

now me
On my github
728x90
'Algorithm > Python' 카테고리의 다른 글
[Programmers] 큰 수 만들기 - 42883 (0) | 2024.12.12 |
---|---|
[Programmers] 소수 찾기 - 42839 (0) | 2024.12.12 |
[Programmers] 2개 이하로 다른 비트 - 77885 (1) | 2024.12.11 |
[Programmers] 2 x n 타일링 - 12900 (0) | 2024.12.11 |
[Programmers] 더 맵게 - 42626 (0) | 2024.12.08 |