| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- BFS
 - 신경망
 - SRCNN
 - DFS
 - deeplearning
 - 비지도학습
 - 지도학습
 - Increasing Triplet Subsequence
 - 딥러닝
 - 합성곱
 - sr
 - EDSR
 - RESNET
 - NeuralNetwork
 - a*
 - CNN
 - MDSR
 - residuallearning
 - 8puzzle
 - AStar
 - residualnetwork
 - leetcode
 - pixelshuffle
 - convolution
 - PYTHON
 - 증가하는부분수열
 - superresolution
 - 준지도학습
 - 동적계획법
 
													Archives
													
											
												
												- Today
 
- Total
 
이것저것 코딩하는 블로그
[Algorithm] 프로그래머스 가장 큰 수 본문
링크: https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 생각한 풀이:
32 3222 34 3444 라는 예제를 보고, 맨 뒤만 반복하여 4자리로 정렬 기준 수를 만들어준 뒤 (3222 3222 3444 3444) 이 숫자로 정렬하고, 만약 정렬 기준 수가 같을 때는 원래 수가 더 짧은 기준 정렬 수를 a, 긴 기준 정렬 수를 b라고 했을 때 a[0] > a[-1]이면 a를 앞에 두고, 아니면 b를 앞에 두었다. 이럴 경우 위와 같은 예제를 해결할 수 있고, 뒷부분이 반복되는 경우를 잡을 수 있다고 생각했다.
틀린 이유:
12 1213이라는 반례가 있었다. 3번째 자리까지 같고 4번째 자리에 더 큰 수가 오는 경우를 생각하지 못했다.
풀이:
수를 세 번 반복한 뒤 비교해야 했다. 처음 생각한 풀이에서 맨 앞과 맨 뒤만 비교한 데서 오류가 있었다. a[0]과 a[-1]을 비교한 후에 a[-1]과 a[-2]도 비교해야 하는 것이 틀린 이유였는데, 이것은 결국 문자를 반복하는 것과 같은 효과를 낸다. 따라서 수를 문자열로 바꿔 세 번 반복하고 각 자릿수를 비교하면 된다.
풀이 코드:
numbers = list(map(int, sys.stdin.readline().split()))
tps = []
res = ''
for num in numbers:
    num_str = str(num)
    tps.append((num_str, num_str*3))
tps = sorted(tps, key=lambda x:x[1], reverse=True)
for tp in tps:
    res += str(int(tp[0]))'Algorithm > Sorting' 카테고리의 다른 글
| [Algorithm] Heap Sort (힙 정렬) (0) | 2021.10.12 | 
|---|---|
| [Algorithm] Quick Sort (퀵 정렬) (0) | 2021.10.12 | 
| [Algorithm] Merge Sort (병합 정렬) (0) | 2021.10.12 | 
| [Algorithm] Radix Sort (기수 정렬) (0) | 2021.10.12 | 
| [Algorithm] Insertion Sort (삽입 정렬) (0) | 2021.10.12 | 
			  Comments