Recent Posts
Recent Comments
Link
Today
Total
03-11 06:38
관리 메뉴

Hippo's data

[프로그래머스] 가장 큰 수 Python 풀이 본문

Algorithm/프로그래머스(programmers)

[프로그래머스] 가장 큰 수 Python 풀이

Hippo's data 2024. 1. 20. 15:28
728x90

프로그래머스(Programmers) 가장 큰 수 문제

난이도 : Level 2 

<문제 링크>

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

 

프로그래머스

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

programmers.co.kr

 

 

 

<처음 코드>

def solution(numbers):
    answer = ''
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x: x[0],reverse=True)
    if numbers[0] == '0':
        answer = '0'
    else:
        answer = ''.join(numbers)
    return answer

 

numbers.sort(key = lambda x: x[0],reverse=True)

저는 처음에 제일 앞자리 수를 큰 수대로 정렬하면 되겠다 싶어서 위 방법을 사용했는데 

 

아니나 다를까 틀리더라구여,,,, 생각해보니

같은 자리수의 숫자들 같은 경우에는 더 큰 숫자가 먼저나오면 되지만 

다른 자리 숫자끼리 비교시에는 고민이 필요하드라구요

예시로 34와 3 두개를 비교하면

343 / 334 -> 34가 먼저 나오고 3이 나와야 더 큰 수가 만들어지드라구요 

 

이를 어떻게 판단할 수 있을까요?? 

특정 수를 연속으로 붙인 후 서로 비교하면 됩니다!! 특히 조건에서 numbers 원소는 1000이하라구 했으니 처음부터 4자리[:4] 까지 비교하면 되겠죠

 

왜 연속으로 붙인 후 비교하면되나욥? 

34를 예시로 들면 34다음에 올 수 있는 가장 큰 수는 34가 되겠죠 ( 34보다 더 큰 수는 이미 34 앞에 존재합니다)

특정 수 뒤로 올 수 있는 가장 큰 수를 연속으로 붙인 후 비교하여 구현가능한 가장 큰 수를 찾으면 됩니다

 

예시로 다시 34와 3을 비교한다면, 연속으로 붙여서 4자리까지 자른 후 비교해서 더 큰 수가 앞으로 오면 됩니다!! 

3434 > 3333   -> 34가 먼저 와야겠죠 

 

이를 코드로 구현하면 아래와 같이 됩니다

 numbers.sort(key = lambda x: (x*4)[:4],reverse=True)

 

<수정된 코드>

def solution(numbers):
    answer = ''
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x: (x*4)[:4],reverse=True)
    if numbers[0] == '0':
        answer = '0'
    else:
        answer = ''.join(numbers)
    return answer
728x90