티스토리 뷰
1. 문제
programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
2. 소스코드 (Python3)
import functools def comp(a,b): if int(a+b) < int(b+a): return 1 if int(a+b) > int(b+a): return -1 return 0 def solution(numbers): strnum = [str(n) for n in numbers] strnum.sort(key = functools.cmp_to_key(comp)) answer = str(int(''.join(strnum)))
return answer |
3. 고찰
1) 내가 원하는 기준으로 정렬할 때 키워드
import functools
리스트.sort(key = functools.cmp_to_key(내 정렬 기준 함수))
2) join 함수
split()함수와 정반대의 기능.
문자열을 원소로 갖는 리스트를 입력하면 -> 문자열 리스트를 구분자를 갖는 하나의 문자열(string)로 반환한다.
문자열리턴 = '구분자'.join(문자열 리스트)
3) 조심해야할 문제 조건
numbers가 모두 0인 경우, 문자열을 정렬한 후 합치면 000 ··· 0 이다. 이것은 숫자로 0으로 표기하므로 이에 대한 처리를 해줘야 한다.
4) 시간복잡도
숫자리스트 -> 문자리스트로 변환하는 연산 : O(N)
sort함수 : O(N log N)
join함수 : O(N)
따라서 위 소스코드의 시간복잡도는 O(N + N log N + N) => O(N log N)이다.
'프로그래밍 > Python' 카테고리의 다른 글
프로그래머스 - 더 맵게 (0) | 2020.12.03 |
---|---|
프로그래머스 - 큰 수 만들기 (0) | 2020.12.03 |
프로그래머스 - 체육복 (0) | 2020.12.03 |
프로그래머스 - 완주하지 못한 선수 (0) | 2020.12.03 |
프로그래머스_문자열 압축 (0) | 2020.11.04 |
- Total
- Today
- Yesterday
- Ubuntu20.04
- 백준알고리즘
- 윈도우 복구
- VirtualBox
- 초음파센서
- 원격 통신
- 포트인식문제
- sensehat
- HC-SR04
- Mount
- set backspace
- ROS
- Python
- C++
- 프로그래머스
- python3
- subscriber
- vue/cli
- 우분투
- 코드리뷰
- 아두이노 IDE
- VMware
- filesystem
- umount
- roslaunch
- Ubuntu16.04
- Publisher
- 8자주행
- 리눅스
- 윈도우
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |