매일 매일 성장하는 섭섭군

[Seop's의 코드풀이] 백준 1431 시리얼 번호 - Python 본문

알고리즘 문제풀이/백준

[Seop's의 코드풀이] 백준 1431 시리얼 번호 - Python

섭섭군 2020. 4. 26. 12:10
반응형

이번에 풀어볼 문제는 백준 1431번인 "시리얼 번호" 라는 문제입니다.

일단 문제부터 함께 살펴보도록 하겠습니다.

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

 

1431번: 시리얼 번호

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

www.acmicpc.net

 

정렬과 관련된 문제입니다.

문제에서 주어진 조건대로만 정렬해서 출력한다면

큰 어려움 없이 해결 할 수 있는 문제입니다.

 

저는 본 문제를 풀때 Python의 lambda 를 활용하여 문제를 풀었습니다,

lambda는 파이썬에서 한번만 사용될 함수를 사용할때 많이 사용하는데요

sorted 와 함께 사용하면 정렬에서 꾀나 유용하게 사용됩니다.

 

간략하게 사용방법을 위 문제로 살펴보도록 하겠습니다.

 

a = sorted(list, key= lambda x: len(x))

이런식으로 사용 할 수 있는데요

정렬 기준을 x의 길이로 삼는 것 입니다.

이때 정렬은 기본적으로 오름차순으로 진행됩니다.

 

또 본 문제에서 주의 깊게 봐야 하는 것이 2번째 제약인데요

저는 새로운 함수를 하나 생성해서 문자열에 있는 숫자의 합을 리턴하도록 진행 하였습니다.

 

딱 위 2가지만을 해결한다면 큰 어려움없이 풀 수 있는 문제입니다.

다음은 전체 코드입니다.

부족한 부분 피드백 해주시면 감사하겠습니다.

 

import sys
input = sys.stdin.readline


def sun_num(s) :
    answer = 0
    for i in s :
        if i >= '0' and i <= '9' :
            answer += int(i)
    return answer

N = int(input())
serial_num = []
for _ in range(N):
    serial_num.append(input().strip())

serial_num = sorted(serial_num , key= lambda x : (len(x), sun_num(x), x))

for i in serial_num :
    print(i)

 

 

 

반응형
Comments