Data house

⭐️⭐️프로그래머스 lv2. [정렬] 가장 큰 수 본문

Computer Knowledge/코테 대비 오답노트

⭐️⭐️프로그래머스 lv2. [정렬] 가장 큰 수

l._.been 2023. 12. 26. 21:23
728x90
문제

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 방법

 

정렬 문제라 만만하게 봤다가 큰 코 다쳤다.. ㅠ

테스트 케이스 [6, 10, 2]를 조합했을 때 가장 큰 수인 '6210'가 나오게 정렬하면 되는 문제인데,

 

이 문제의 핵심 포인트는

  1. 리스트 안의 수는 1000 이하의 수가 나온다는 점이다. 
  2. 숫자의 정렬와 문자열의 정렬은 다르다.

위의 포인트를 살리면 쉽게 풀 수 있다.

 

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