관리 메뉴

솜씨좋은장씨

[BaekJoon] 1431번 : 시리얼 번호 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 1431번 : 시리얼 번호 (Python)

솜씨좋은장씨 2022. 3. 2. 10:57
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 시리얼 번호 입니다.

 

1431번: 시리얼 번호

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

www.acmicpc.net

👨🏻‍💻 문제 풀이

시리얼 번호 목록이 주어지면

  1. A와 B의 길이가 다르면, 짧은 것이 먼저 온다.
  2. 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다)
  3. 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 숫자가 알파벳보다 사전순으로 작다.

위의 규칙에 따라 정렬하고 정렬한 대로 출력하는게 이 문제 입니다.

 

저는 각각의 시리얼 번호에 정렬 기준이 되는 값을 만들어 넣어두고 해당 값들로 정렬하였습니다.

 

먼저 1번의 길이는 len으로 구했습니다.

len(serial_num)

2번의 모든 자리수의 합은 정규식을 활용하였습니다.

import re

def get_nums_sum(serial_num):
    num_string = map(int, list(re.sub(r'[A-Za-z]', '', serial_num)))
    
    return sum(num_string)

이렇게 만든 값들을

serial_num_infos = [(serial_num, len(serial_num), get_nums_sum(serial_num)) for serial_num in serial_num_infos]
    
sorted_result = sorted(serial_num_infos, key=lambda x: (x[1], x[2], x[0]))

정렬하는데 활용했습니다.

 

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

import re

def get_nums_sum(serial_num):
    num_string = map(int, list(re.sub(r'[A-Za-z]', '', serial_num)))
    
    return sum(num_string)
    
    

def serial_number(serial_num_infos):
    serial_num_infos = [(serial_num, len(serial_num), get_nums_sum(serial_num)) for serial_num in serial_num_infos]
    
    sorted_result = sorted(serial_num_infos, key=lambda x: (x[1], x[2], x[0]))
    
    return [result[0] for result in sorted_result]
    
    
if __name__ == "__main__":
    serial_num_infos = []
    for _ in range(int(input())):
        serial_num = input()
        serial_num_infos.append(serial_num)
        
    answer_result = serial_number(serial_num_infos)
    
    for answer in answer_result:
        print(answer)
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments