행궁동 데이터 엔지니어

반응형

https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3

 

알고리즘 연습 - 가장 큰 수 | 프로그래머스

실행 결과가 여기에 표시됩니다.

programmers.co.kr

처음에 전체 수의 조합을 찾고, 그중에서 가장 큰 값을 찾는다로 접근했는데 역시나 "시간초과"

 

# 전체 수 조합 찾고, 그중에서 가장 큰 값을 찾기 (시간초과로 실패)

1
2
3
4
5
6
7
8
9
10
11
12
13
import itertools
 
def solution(numbers):
    
    s_num = [str(i) for i in numbers]
    
    p_num = itertools.permutations(s_num)
    p_num = ["".join(i) for i in p_num]
    p_num.sort()
    
    return p_num[len(p_num)-1
        
    return answer

# 아래는 성공한 코드

 - 주어진 수의 자리수를 모두 12자리로 통일해주고 값을 비교해서 정렬 후 합쳐준다.

 - 자리수를 일치시키고 비교한다는 Idea가 중요했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def solution(numbers):
    
    # 1~4자리까지 자리수별로 모으기 / 모두 12자리로 통일 해준다.
    numbers = [str(i) for i in numbers] # 모두 str로 변환
    com_list = []    
    for i in numbers :
        if len(i) == 4 :
            com_list.append([i,i*3])
        if len(i) == 3 :
            com_list.append([i,i*4])
        if len(i) == 2 :
            com_list.append([i,i*6])
        if len(i) == 1 :
            com_list.append([i,i*12])
    
    com_list.sort(key=lambda x:x[1],reverse=True)
    
    f_list = []
    for i in com_list :
        f_list.append(i[0])
    
    return str(int(''.join(f_list)))
 
 

# 다른사람 코드 (훨씬 간결하다)

1
2
3
4
5
def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    # print(numbers)
    return str(int(''.join(numbers)))
반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band