0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
각 number의 첫 자리 (숫자 맨 앞자리 수)만 구해 비교한다.
str() -> slicing [:1] -> map(int, number) -> [3,3,3,5,9] 마지막이 이럴 것이라 생각.
문제
문제에서는 예시로 30,3,34가 있을 때 34->3->30 이런 순으로 순서를 매겼는데 이러면 둘째 자리를 또 비교해야한다.
둘째 자리만이 문제가 아니라 제한 사항에 따르면 원소는 1000이하이므로 최대 4번의 반복된 연산이 시행될 것으로 보였다. 이러면 연산반복도 문제, 비교하는 것도 문제, answer에 넣는 것도 모두 문제였다.. 여기까지 생각이 도달하니 이건 아니다 싶었음.
총 5분 정도 고민한 것 같다...
문자열은 아스키코드로 비교가 가능하다!
이 생각이 들고 유레카! 싶어서 이것저것 시도하다 보니 정말 딱 아이디어 하나만 더 있으면 완벽하겠다 싶었는데 도저히 생각이 안났다.
마침 문자열 비교를 검색해 보고 있는데, 똑똑하신 블로거님의 글을 보았고.. 이 문제의 키포인트는 사실 x*3을 이용해 문자열을 3번 반복해 비교하는 것이라는 엄청난 힌트를 보아버렸고.. 어쩌다보니 그 분과 코드가 너무 비슷해졌지만 덕분에 충분한 공부를 했다. (블로그 링크는 출처란)
출처
프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/42746
코드 참고 https://wooaoe.tistory.com/82