본문 바로가기

알고리즘/정렬

백준 | 파이썬 | 1431 | 시리얼 번호

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

solution

# 1431, 시리얼 번호
import sys


# 길이가 같은 배열 자리수의 합으로 정렬
def serial_sort1(arr):
    sorted_arr = {}
    return_arr = []
    for number in arr:
        sum = 0
        for ch in number:
            if ch.isdigit():
                sum += int(ch)
        if sorted_arr.get(sum) is None:
            sorted_arr[sum] = [number]
        else:
            sorted_arr[sum].append(number)

    sorted_arr = sorted(sorted_arr.items(), key=lambda x: x[0])
    for i in sorted_arr:
        return_arr.extend(i[1])
    return return_arr



N = int(sys.stdin.readline())
serial = {}

for _ in range(N):
    num = sys.stdin.readline().strip()
    if serial.get(len(num)) is None:
        serial[len(num)] = [num]
    else:
        serial[len(num)].append(num)
 

for i in range(len(list(serial.values()))):
    if len(list(serial.values())[i]) != 1:
        num = serial_sort1(list(serial.values())[i])
        serial[list(serial.keys())[i]] = num


serial = sorted(serial.items(), key=lambda x: x[0])


ans = []

for i in serial:
    for j in i[1]:
        print(j)

반례 : 

3

A0A

0AA

AAA


# 1431, 시리얼 번호
import sys


# 길이가 같은 배열 자리수의 합으로 정렬
def serial_sort1(arr):
    sorted_arr = {}
    return_arr = []
    
    for number in arr:
        sum = 0
        for ch in number:
            if ch.isdigit():	# 숫자면 더함
                sum += int(ch)
        
        if sorted_arr.get(sum) is None:
            sorted_arr[sum] = [number]
        else:
            sorted_arr[sum].append(number)
            
    sorted_arr = sorted(sorted_arr.items(), key=lambda x: x[0])
    
    for i in sorted_arr:
        i[1].sort()		# 조건 3
        return_arr.extend(i[1])
    return return_arr



N = int(sys.stdin.readline())
serial = {}

for _ in range(N):
    num = sys.stdin.readline().strip()
    if serial.get(len(num)) is None:
        serial[len(num)] = [num]
    else:
        serial[len(num)].append(num)

for i in range(len(list(serial.values()))):
    if len(list(serial.values())[i]) != 1:
        num = serial_sort1(list(serial.values())[i])
        serial[list(serial.keys())[i]] = num

serial = sorted(serial.items(), key=lambda x: x[0])


ans = []

for i in serial:
    for j in i[1]:
        print(j)

29380KB

64ms