문제: 가장 큰 수
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
- 내 풀이 (오답)
def solution(numbers): answer = '' #첫번째 수 값으로 오름차순 정렬 numbers=sorted(numbers,key=lambda num:str(num)[0],reverse=True) for num in numbers: answer=answer+str(num) return answer
→ 첫 번째 예시에만 적용되는 코드
첫번째 수가 동일한 수가 여러 개 일 때 더 큰 수를 만들도록 정렬하고 싶었지만 알아내지 못함
- 다른 사람 풀이
def solution(numbers):
#사전 값으로 정렬
numbers_str=[str(num) for num in numbers]
#number는 1000이하의 숫자이므로 x3(반복)한 값으로 비교
numbers_str.sort(key=lambda num: num*3, reverse=True)
return str(int(''.join(numbers_str)))
#만약 numbers=[0,0,0,0]이면 0으로 나와야 하므로 int 처리
#join한 값을 int로 만들어 준 후 요구하는 return 값인 str로 변환
중요 포인트
- str로 형 변환하여 사전 값으로 배열 생성
- str로 변경한 숫자에 3을 곱한 값(반복)으로 재정렬
→ 람다식 이용해서 정렬 조건에서 3을 곱한 것: 배열 내 원래 값은 변하지 X
[999, 555, 343434, 303030, 333] 값으로 생각하고 정렬 → [999, 555, 343434, 333, 303030]
- 반환 해줄 때, int로 변환 해준 후 다시 str로 변경
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 1] x만큼 간격이 있는 n개의 숫자 (0) | 2022.02.05 |
|---|---|
| [프로그래머스] [Level 1] 직사각형 별 찍기 (0) | 2022.02.05 |
| [프로그래머스] [Level 1] 신고 결과 받기 (0) | 2022.02.03 |
| [프로그래머스] K번째 수 (정렬) (0) | 2022.02.03 |
| [프로그래머스] 완주하지 못한 선수 (해시) (0) | 2022.01.26 |