honey_pot

[python] 가장 큰 수 본문

문제 풀이

[python] 가장 큰 수

_tera_ 2021. 9. 10. 15:47

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):
    numbers = sorted(list(map(str, numbers)), key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))
  1. numbers의 숫자를 map을 이용해 string 형변환 후 list로 만든다. 
  2. sorted 함수를 이용해 내림차순 정렬을 하되, 각 numbers의 원소 x를 각각 3번씩 반복한 값을 기준으로 정렬한다.

➡ numbers의 원소가 1000 이하이므로 세 자리 수 이하로 저장하기 위해 3번 반복한다.

문자열 비교는 ASCII 값으로 치환되어 정렬되기 때문에 666, 101010, 222 의 첫번째 인덱스 값으로 비교한다.

 

 

6 = 86

1 = 81

2 = 82

➡ 6 > 2 > 1

순으로 정렬된다.

  1. 이제 numbers 리스트의 데이터는 ['6','2','10'] 순으로 정렬되어 있다.
  2.  join 함수를 이용해 ''를 사이에 연결한 문자열을 int 형변환
  3. 정답이 너무 클 수 있으니 문자열로 바꾸어 return하라는 조건이 있으므로 string 형변환을 해준다.
  4. 모든 값이 0일 때를 처리하기 위해 int로 변환한 뒤, 다시 str로 변환한다.

➡ '000' 일 경우 string으로 '000' 일뿐 int형으로는 0이므로 000에서 0으로 만들기 위해 int 형변환 후 string 형변환

 

'문제 풀이' 카테고리의 다른 글

[python] 행렬의 곱셈  (0) 2021.09.12
[oracle] 중성화 여부 파악하기  (0) 2021.09.10
[python] 124 나라의 숫자  (0) 2021.09.10
[python] 소수 만들기  (0) 2021.09.09
[python] 체육복  (0) 2021.09.09
Comments