Data house
⭐️⭐️프로그래머스 lv2. [정렬] 가장 큰 수 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 방법
정렬 문제라 만만하게 봤다가 큰 코 다쳤다.. ㅠ
테스트 케이스 [6, 10, 2]를 조합했을 때 가장 큰 수인 '6210'가 나오게 정렬하면 되는 문제인데,
이 문제의 핵심 포인트는
- 리스트 안의 수는 1000 이하의 수가 나온다는 점이다.
- 숫자의 정렬와 문자열의 정렬은 다르다.
위의 포인트를 살리면 쉽게 풀 수 있다.
1번의 특징을 살리면 각 리스트 안의 원소에 3을 곱하면 된다. ex) '99' ,'991' -> '999999', '991991991'
숫자의 정렬은 '991991991'이 '999999'보다 크지만, 문자열 비교연산의 경우에 문자열 첫번째 인덱스를 아스키숫자로 바꿔서 비교하고, 같으면 그 다음 인덱스를 비교하기때문에 숫자비교와는 다르다. 따라서 문자열의 정렬에서는 '999999'가 '991991991'보다 크다.
마지막에 문자열인 숫자를 '정수' -> '문자열'로 바꿔야 '00'을 '0'으로 바꿀 수 있다.
정답 코드
def solution(arr):
arr = list(map(str, arr))
arr.sort(key=lambda x : x*3, reverse=True)
return str(int(''.join(arr)))
참고 사이트
https://yuna0125.tistory.com/145
[프로그래머스 Lv.2][정렬] 가장 큰 수 (python)
문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중
yuna0125.tistory.com
'Computer Knowledge > 코테 대비 오답노트' 카테고리의 다른 글
[2024 카카오 코테 대비] - Lv3. 표 편집 (2021 카카오 인턴) (0) | 2023.11.24 |
---|---|
[python] lv.1 추억 점수 - ㅋㅋㅋㅋ한 줄 풀이 어이없어 (0) | 2023.09.22 |
⭐️⭐️[python] lv.1 비밀지도 (0) | 2023.09.21 |
[python] lv1. 시저암호 - 아스키코드 (0) | 2023.09.21 |
⭐️ [python] 예산 - 1단계지만 어려워 (0) | 2023.09.20 |