'정렬'에 해당되는 글 1건

  1. 2022.02.28 [ 정렬 ][ 파이썬 ] 프로그래머스 : 가장 큰 수
알고리즘2022. 2. 28. 13:29
728x90

[ 문제 ]

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

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

 

[ 코드 ]

def solution(numbers):
    answer = ''
    
    # numbers를 문자열로 바꿔 str_num에 넣음 (사전값 정렬)
    str_num = []
    str_num = list(map(str,numbers))
    ''' (위와 같은 코드)
    for n in numbers:
        str_num.append(str(n))
    '''
    
    # numbers 원소 1000이하 이므로 x*3 (문자열 3번 반복)
    # ex. 3 vs 30을 333 vs 303030으로. 앞에서 부터 비교하면 303<333
    # 즉, 사전순 오름차순이었으면 3->30임. 하지만 *3하면 30->3
    str_num.sort(key=lambda x: x*3, reverse = True)
    # sort에서 key값을 기준으로 정렬. 이때 lambda함수 이용가능
    
    # 0000을 '0' 으로 출력하기 위해 int -> str로 변경
    answer = str(int(''.join(str_num)))
    return answer

 

* 마지막에 answer = ''.join(str_num) 이렇게만 했더니 딱 하나의 테스트 케이스가 통과되지 않았다.

그래서 검색을 해보니 int로 변경 후 str로 변경해야 한다고 했다.

특히 '0000'의 경우 실제로는 '0'인데 int로 변경하지 않으면 '0000'으로 나온다.

 

* ''.join(str_num)''를 기준으로 str_num의 원소들을 합쳐라는 의미 이다.

여기서는 따옴표 안에 아무 것도 없기에 연속으로 합쳐라는 의미 이다. (ex. 6210)

문자 +을 기준으로 합치고 싶다면 '+'.join(str_num) 이렇게 이용 가능 하다. (ex. 6+2+10)

반응형
Posted by mminky