메모/알고리즘

[프로그래머스] Python - 가장 큰 수

Floodnut 2022. 2. 3. 00:33
 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

프로그래머스의 정렬 레벨2 문제다.

사전식 정렬을 이용하는데 반례가 존재한다.

"30" ,"3"

# 답
"330"
# 반례
"303"

 

위와 같은 두 수를 문제의 의도대로라면 큰 수가 앞에 와야하는데 사전식 정렬을 이용하면 "30"이 "3"보다 앞에 오게 된다.

이 문제 해결을 위해 각 값에 3을 곱했다. 3을 곱한 이유는 천의 자리의 조건을 맞추기 위해서다.

 

"3" -> "333"

"30" -> "303030"

문자열로 변환한 수에 3을 곱하면 위와 같이 변경된다.

이렇게 변경해서 "333"이 "303030"보다 사전순으로 큰 문자가 되어 앞에 오게된다.

 

여기서 하나의 반례가 더 존재한다.

#원본
[0,0,0]

#결과
"000"

위와 같이 0으로만 이루어진 리스트가 주어지면 결과 값이 "0"이 나와야 함에도 "000"이 출력된다.

따라서 0만으로 이루어진 결과는 0으로 변경되도록 하였다.

 

 

제출 결과

 

 

GitHub - Floodnut/Algorithm: 알고리즘 풀이 모음

알고리즘 풀이 모음. Contribute to Floodnut/Algorithm development by creating an account on GitHub.

github.com