알고리즘/프로그래머스문제풀이

[Python/프로그래머스]가장 큰 수_정렬

개발자 덕구🐾 2022. 6. 11. 12:54
728x90

 

 

 

 

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

 

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

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

programmers.co.kr

 

 

 


쉬워보였다.

그러나 10과 4중 4를 먼저가도록 만들어야하는데 그 방법을 모르겠다.

그래서 답을 찾아봤다. 

 

 

신박하게 문자열 *를 이용해 늘려서 

비교한다. 

 

큰 문자부터 써야하므로 reverse = True이다. 

 

 

 

숫자를 문자로 바꾼 후 그 문자를 ASCII 값으로 치환되어 정렬한다. 

 

숫자들이 str형태로 들어있는 리스트를 정렬하면 숫자가 큰 값순으로 정렬되는 것이 아니다.

맨 앞자리의 문자를 기준으로 정렬이 되는 것이다. 

 

 

이렇게하면 첫번째 수가 클수록 크다고 정렬된다.

3과 20을 비교하면 3이 더 크다고 정렬되는 것이다. 

 

 

 

 

 

<num. sort(key = lambda x : x*3, reverse = True)>

 

key를 통해 정렬의 기준을 설정할 수 있다 -! 

문자가 들어있으므로 문자가 3번 반복한 문자를 기준으로 정렬하는 것이다. 

 

 

 

3으로 곱하는 이유는 1000자리까지기 때문이다...라고 하면 잘 이해가 안간다.

3과 30을 비교할 때 

3이 30보다 먼저 가야한다. 

여기서 *3을 하면

333과 303030이 된다. 

이렇게 하면 333이 더 커지지게 되므로 *3을 한다. 

 

 

숫자를 만든 후에 int형으로 만들어 앞자리 0을 제거하고 다시 str로 만들어준다.

 

 

int화 해주는 이유는 numbers에 0도 들어갈수있기 때문이다.

[0,0,0,0] 이 들어가면 현재 0000으로 나오므로 int()를 통해 0으로 바꿔야한다.

 

 

 

코드 : 

def solution(numbers):
    num = list(map(str,numbers)) # str으로 변경
    num.sort(key=lambda x : x*3,reverse = True) # 내림차순 -> 큰것부터    
    
    answer = str(int(''.join(num))) # 0을 제거하기위해 int형을 거침 
    return answer

 

 

 

쉽게 풀어쓴 코드 :

def solution(numbers):
    answer = 0
    tmp = []
    for num in numbers :
        tmp.append(str(num))
    tmp.sort(key = lambda x : x*3,reverse = True)
    answer = str(int(''.join(tmp)))
    
    return answer

 

첫번째 코드처럼 쓰려고 해야하는데 이게 더 쉬워서 자꾸 이렇게 쓴다. 

첫번째 코드처럼 쓰는 연습을 하자 

 

 

 

 

복습하면서 나온 코드 :

 

def solution(numbers):
    answer = 0
    numbers.sort(key = lambda x : str(x)*3, reverse = True)
    answer = str(int(''.join(map(str,numbers))))
    return answer

 

 

join은 str형태의 인수들에만 적용이 되기때문에 str을 걸어줘야한다.

 

 

원래 코드는 str -> 정렬 -> join -> int -> str인데

위 코드는 정렬 -> str -> join -> int -> str이다.

 

 

 

 

배운점 : 

1. sort의 key - lambda 

 

 

 

 

 

 

 

참고 블로그 : 

 

https://wooaoe.tistory.com/82

 

[Python] 프로그래머스 가장 큰수 파이썬 코드

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

wooaoe.tistory.com

https://velog.io/@insutance/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Python-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%88%98

 

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

프로그래머스 '가장 큰 수' 문제 풀이

velog.io

https://jokerldg.github.io/algorithm/2021/05/06/most-big-number.html

 

프로그래머스 가장 큰 수 (python 파이썬) - Tech

프로그래머스 가장 큰 수 (python 파이썬) May 06, 2021

jokerldg.github.io

 

 

복습 : 

20220619

20220621

✅ 20220623

✅ 20220626

✅ 20220630

반응형