[Programmers] 가장 큰 수
🎈문제
https://programmers.co.kr/learn/courses/30/lessons/42746
💬설명
- 감이 안와서 다른 사람 코드를 참고했는데 풀이를 봤을 때 더 어려운 문제였다.
- 과정
- 1000 이하의 숫자이기 때문에 각 자리수를 3번 곱해준다.
- 문자열로 각 숫자를 취급하면서 정렬한다. '333', '101010'의 경우 첫번째 수부터 비교하기 때문에 '333'이 더 크다.
- 정렬한 결과를 붙여서 출력한다.
- 포인트
- 3번 곱해주는 이유?
- '1'과 '112'가 있을 때 두번째 숫자부터 비교가 안된다. 두번 곱해주면 '11', '112112'가 되고 여기선 세번째 숫자가 비교가 안된다. 따라서 입력값의 최대값이 1000이기 때문에 3번 곱해준다. '111', '112112' 이제 비교가 된다.
- 왜 이런방식으로 풀었을 때 답이 나오는 건지?
- '3', '30', '34'를 비교했을 때 '333', '303030', '343434'를 비교하게 되는데 3뒤에 무조건 30이나 34가 나와서 3이 붙을 것이기 때문에 가능한 방법이다.
- 3번 곱해주는 이유?
👩💻코드
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
👉참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[Programmers] 모의고사 (0) | 2021.10.14 |
---|---|
[BaekJoon] 백준 21608번 상어 초등학교 (0) | 2021.10.14 |
[Programmers] H-Index (0) | 2021.10.13 |
[Programmers] K번째수 (0) | 2021.10.12 |
[Programmers] 이중우선순위큐 (0) | 2021.10.12 |