on my way

[프로그래머스 코딩테스트 연습 > 정렬] 가장 큰 수 (Python3) Lv2 본문

algorithm/Python

[프로그래머스 코딩테스트 연습 > 정렬] 가장 큰 수 (Python3) Lv2

wingbeat 2024. 6. 20. 03:00
반응형


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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

# 틀린 코드
def solution(numbers):
    return ''.join(map(str,sorted(numbers, key=lambda x : x*pow(10,(len(str(max(numbers)))-len(str(x)))), reverse=True)))

3과 30중에 3이 큰 걸 캐치하지 못해 틀림

 

 

 


# 정답 코드
def solution(numbers):
    return str(int(''.join(sorted(map(str,numbers), key=lambda x:x*3, reverse=True))))

 

이 문제는 주어진 숫자 리스트를 조합하여 가장 큰 수를 만드는 문제이다.

이를 해결하기 위해 문자열 비교를 사용해야한다.

숫자를 문자열로 변환한 후, 각 숫자를 최대 길이(1000 이하)로 맞추기 위해 3번 반복한 후 비교한다.

이렇게 하면 문자열 비교를 통해 숫자 비교와 유사한 효과를 얻을 수 있다.

 

 

핵심 아이디어

  1. 숫자를 문자열로 변환: 숫자를 문자열로 변환한다.
  2. 문자열 비교: 문자열 비교는 첫 번째 문자부터 아스키 코드로 비교한다. 예를 들어 '121'과 '12'의 경우, 문자열 비교에서는 '121121121'과 '121212'를 비교한다.
  3. 3배 반복: 주어진 숫자의 최대 길이가 3자리이므로, 각 숫자를 3번 반복하여 길이를 맞춘다. 예를 들어, '3'은 '333', '31'은 '313131', '310'은 '310310310'로 변환된다.
  4. 정렬: 변환된 문자열을 기준으로 정렬한다.
  5. 결과 반환: 정렬된 문자열을 결합하여 결과를 반환한다. 마지막에 str(int(''.join(numbers)))를 사용하여 '000'과 같은 경우를 '0'으로 처리한다.

 

수정한 코드

def solution(numbers):
    return str(int(''.join(sorted(map(str,numbers), key=lambda x:x*3, reverse=True))))
반응형