백준 1431 - 시리얼 번호 (Python)

2024. 2. 12. 05:36알고리즘

문제

https://www.acmicpc.net/problem/1431

 

1431번: 시리얼 번호

첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어

www.acmicpc.net

풀이

a = []
for _ in range(int(input())):
    s = input()
    a.append([len(s),sum([int(i) for i in s if i.isdigit()]),s])

a.sort(key=lambda x: (x[0],x[1],x[2]))

for i in a:
    print(i[2])

코드는 많이 줄여서 썼지만 알고리즘은 다음과 같다.

[문자열의 길이, 숫자인 것들의 합, 문자열 전체] 이렇게 이루어진 리스트를 원소로 가지는 이차원 리스트를 구성한 뒤,

0번째, 1번째, 2번째 인덱스의 값 순서로 우선순위를 두어 정렬한다.

이후 문자열에 해당하는 2번째 값을 출력한다.