코딩테스트 연습
[파이썬] 프로그래머스: 가장 큰 수 / 아스키코드
콩콩(๓° ˘ °๓)♡
2023. 3. 21. 23:04
문자열도 비교연산이 가능하다. 각각의 문자는 아스키코드값을 가지기 때문이다. 따라서 sort함수로 정렬도 가능하다.
단 두 문자열의 길이가 다를 경우, 짧은 문자열이 끝나는 지점에서 비교가 끝난다.
그래서 아래 문제는 각 문자열에 임의로 *3을 해서 정렬을 수행했다.
예를 들어 3과 35가 있을 때 어떤 수가 앞으로 와야 더 큰 수를 만들 수 있을지 보았을 때
각 문자열을 3번 반복하여 비교하면
333과 353535로 비교하게 되는데
더 짧은 문자열이 끝나는 곳에서 비교가 종료되므로
결국 333 < 353 이 되어 35가 앞에있어야 더 큰 수를 만들 수 있다는 결론이 나온다.
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x * 3, reverse=True)
return str(int(''.join(numbers)))
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
포인트는 사실 단순히 문자열을 반복한다는 것 보다 맨 앞자리수가 같기 때문에 두 수를 이어 붙였을 때 335가 될 것이냐, 353이 될 것 이냐의 문제인데, 두 수의 맨 앞자리수는 같기 때문에 무엇을 넣어도 백의 자리는 3이 될 것이며, 십의 자리를 결정하기 위한 전략으로, 처음 numbers에 입력되는 숫자들의 자리수가 다르기 때문에 비교를 위해 모듈화 하는 전략이라고 볼 수 있다.