백준 1431 정렬

정렬문제입니다. https://www.acmicpc.net/problem/1431

단순한 정렬이 아닌 3가지의 우선순위가 정해져 있습니다.

이 역시 다른 언어로 풀면 어려울 것 같습니다.

하지만 python은 강력합니다.

아이디어는 다음과 같습니다.

  1. input시 시리얼번호의 숫자를 모두 더해 추가로 list에 저장한다 ( 예 : ( 'a2b3' , 5) )
  2. 1 번째 우선순위로 길이를 통해 정렬한다.
  3. 2 번째 우선순위로 숫자를 통해 정렬한다.
  4. 3 번째 우선순위로 사전순으로 정렬한다.

python의 사전 순서는 다음과 같습니다.

숫자 알파벳순서이며 같은 문자의 대소문자 경우 소문자가 더 큽니다.

예 : 1<2<3.... < A < a < B < b ..... < Z < z

이 역시 이전 포스팅 정렬문제와 마찬가지로 python의 sort와 key를 람다함수로 적용하면 쉽게 풀 수 있습니다.

###### python의 문자열 기준 
# a < b < c ... <z 사전순
# B < b  소문자가 더 큼 
#

n = int( input() )
numbers = {'0', '1', '2', '3', '4', '5', '6' , '7','8','9'} # possible input numbers 
array = []

for i in range(n): 
    serial = input()
    sum = 0 
    for i in serial:
        if ( i in numbers ):
            sum+=int(i)
    
    array.append( [len(serial), serial, sum])
    
array.sort(key= lambda x: (x[0],x[2],x[1]) ) # 길이 순 정렬
for i in array:
    print(i[1])

코드가 긴 버전은 내장함수를 사용하지 않고 구현해보았습니다. ( 심심풀이 )

틀린이유 : 없음

좋은 웹페이지 즐겨찾기