CS/Algorithm 문제

[Programmers] 가장 큰 수

[Programmers] 가장 큰 수

 

🎈문제

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

💬설명

  • 감이 안와서 다른 사람 코드를 참고했는데 풀이를 봤을 때 더 어려운 문제였다.
  • 과정
    • 1000 이하의 숫자이기 때문에 각 자리수를 3번 곱해준다.
    • 문자열로 각 숫자를 취급하면서 정렬한다. '333', '101010'의 경우 첫번째 수부터 비교하기 때문에 '333'이 더 크다.
    • 정렬한 결과를 붙여서 출력한다.
  • 포인트
    1. 3번 곱해주는 이유?
      • '1'과 '112'가 있을 때 두번째 숫자부터 비교가 안된다. 두번 곱해주면 '11', '112112'가 되고 여기선 세번째 숫자가 비교가 안된다. 따라서 입력값의 최대값이 1000이기 때문에 3번 곱해준다. '111', '112112' 이제 비교가 된다.
    2. 왜 이런방식으로 풀었을 때 답이 나오는 건지?
      • '3', '30', '34'를 비교했을 때 '333', '303030', '343434'를 비교하게 되는데 3뒤에 무조건 30이나 34가 나와서 3이 붙을 것이기 때문에 가능한 방법이다.

👩‍💻코드

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

 

👉참고

https://wooaoe.tistory.com/82

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