Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 동적계획법
- 프로그래머스
- 월간 코드 챌린지 시즌2
- Python
- 그리디알고리즘
- 스프링
- 스택
- 최빈값
- 404에러
- 코테
- 코딩테스트
- 동적
- 소트인사이드
- 스프링프레임워크
- 백준
- 그리디
- 백트래킹
- 퇴각검색
- sort
- 브루트포스
- 2중포문
- 덩치
- 정렬
- 파이썬
- 소트
- DFS
- 다익스트라
- 최단거리
- Backtracking
- 통계학
Archives
- Today
- Total
취준생의 코딩테스트 연습기
[프로그래머스] 가장 큰 수 / 파이썬(python) 본문
# 문제 링크
programmers.co.kr/learn/courses/30/lessons/42746
# Soultion (실패)
itertools를 이용하여 순열을 사용하여 문제를 해결했지만, 시간 초과 문제 발생
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import itertools
def solution(numbers):
answer = 0
new_numbers =[]
for n in numbers:
new_numbers.append(str(n))
for i in itertools.permutations(new_numbers,len(numbers)):
if answer < int(''.join(i)):
answer = int(''.join(i))
return str(answer)
|
cs |
# Soultion (실패)
for문을 돌면서 숫자를 str()로 변환한 뒤, 정렬을 했지만 3, 30과 같은 경우에서 문제 발생
1
2
3
4
5
6
7
8
9
10
11
|
def solution(numbers):
answer = ''
while(numbers):
max_num = 0
for i in numbers:
if str(max_num) < str(i):
max_num = i
answer+=str(max_num)
numbers.remove(max_num)
return answer
|
cs |
-> 도저히 해결방법이 생각나지 않아 다른사람들의 풀이를 보고 도움 받음
# Soultion (성공)
1
2
3
4
5
|
def solution(numbers):
num_li = list(map(str,numbers)) # int를 str로 형변환
num_li.sort(key = lambda x: x*3, reverse=True)
return str(int(''.join(num_li)))
|
cs |
3. 30보다는 9가 더 앞에와야하므로, str로 형변환을 시켜준다.
나는 위에서 for문을 이용하여 무식하게 str로 변환을 시켰지만, map함수를 이용하여 간단하게 형변환이 가능하다.
4. str로 바꾼 숫자를 정렬시켜준다. 이때, 3과 30을 비교했을때 3이 더 앞에 나와야하므로, 최대 자릿수인 1000을 맞추주기위하여 lambda 함수를 사용하여 x를 3배시켜준다.
5. 정렬된 숫자를 출력한다. str(int())로 int형으로 한번 변환시켜주는 이유는 00과 같은 경우를 0으로 바꿔주기 위해서이다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 음양 더하기 / 파이썬(python) (0) | 2021.05.01 |
---|---|
[프로그래머스] 괄호 회전하기 / 파이썬(python) (0) | 2021.04.19 |
[프로그래머스] 배달 / 파이썬(python) - 도전중 (0) | 2021.03.17 |
[프로그래머스] 주식가격 / 파이썬(python) (0) | 2021.03.16 |
[프로그래머스] 삼각 달팽이 / 파이썬(python) (0) | 2021.03.13 |
Comments