파이썬 백준 1431번
실버 3
https://www.acmicpc.net/problem/1431
문제 보기
분류: 정렬
문제 풀기
가장 바깥 리스트를 시리얼 번호 최대 길이인 50+1 로 지정하고 기타의 시리얼 번호를 입력받을 때마다 각 index 에 맞게 누적하여 저장한다. 저장하기 전에 함수 fnSumOfNum(serial) 에 넣어 숫자만 판별하여 그 수를 모두 더하고 sNum_serial 에 첫 번째에 그 합을 두 번째에 시리얼 번호를 모은다.
예제 입력 1)
# [[], [[0, 'A']], [], [], [[0, 'ABCD'], [10, '145C'], [10, 'A910'], [6, 'Z321']], ,,,]
함수 fnSortAndPrint(serialLen_ls) 를 사용하여 모두 저장된 리스트에서 빈 공간을 제외하고 순차적으로 뽑아내면서 그 안의 원소를 lambda 로 정렬 후 답을 출력한다.
serialLen_ls[i].sort(key = lambda x : (x[0], x[1]))
예제 입력 1)
# [[0, 'A']]
# A
# [[0, 'ABCD'], [6, 'Z321'], [10, '145C'], [10, 'A910']]
# ABCD
# Z321
# 145C
# A910
코드 보기
import sys
inputdata = sys.stdin.readline
def fnSumOfNum(serial):
sNum = 0
sNum_serial = []
for s in serial:
if s.isdigit():
sNum += int(s)
sNum_serial.append(sNum)
sNum_serial.append(serial)
return sNum_serial
def fnSortAndPrint(serialLen_ls):
for i in range(len(serialLen_ls)):
if len(serialLen_ls[i]) != 0:
serialLen_ls[i].sort(key = lambda x : (x[0], x[1]))
# print(serialLen_ls[i]) # TEST PRINT
for j in range(len(serialLen_ls[i])):
print(serialLen_ls[i][j][1])
if __name__ == "__main__":
n = int(inputdata().strip())
serialLen_ls = [[] for _ in range(51)]
# print(serialLen_ls) # TEST PRINT
for _ in range(n):
serial = str(inputdata().strip())
serialLen = len(serial)
sNum_serial = fnSumOfNum(serial)
serialLen_ls[serialLen].append(sNum_serial)
# print(serialLen_ls) # TEST PRINT
fnSortAndPrint(serialLen_ls)
추가 하기
예제 입력 1번 (최대 시리얼 번호의 길이를 4로 제한, 가독성 있는 출력 결과를 확인하기 위해)
import sys
inputdata = sys.stdin.readline
def fnSumOfNum(serial):
sNum = 0
sNum_serial = []
for s in serial:
if s.isdigit():
sNum += int(s)
sNum_serial.append(sNum)
sNum_serial.append(serial)
return sNum_serial
def fnSortAndPrint(serialLen_ls):
for i in range(len(serialLen_ls)):
if len(serialLen_ls[i]) != 0:
serialLen_ls[i].sort(key = lambda x : (x[0], x[1]))
print(serialLen_ls[i]) # TEST PRINT
for j in range(len(serialLen_ls[i])):
print(serialLen_ls[i][j][1])
if __name__ == "__main__":
n = int(inputdata().strip())
serialLen_ls = [[] for _ in range(5)]
print(serialLen_ls) # TEST PRINT
for _ in range(n):
serial = str(inputdata().strip())
serialLen = len(serial)
sNum_serial = fnSumOfNum(serial)
serialLen_ls[serialLen].append(sNum_serial)
print(serialLen_ls) # TEST PRINT
fnSortAndPrint(serialLen_ls)
# 5
# ABCD
# 145C
# A
# A910
# Z321
# [[], [], [], [], []]
# [[], [[0, 'A']], [], [], [[0, 'ABCD'], [10, '145C'], [10, 'A910'], [6, 'Z321']]]
# [[0, 'A']]
# A
# [[0, 'ABCD'], [6, 'Z321'], [10, '145C'], [10, 'A910']]
# ABCD
# Z321
# 145C
# A910
'공부하기 > 백준' 카테고리의 다른 글
[Python] 백준 풀기 2822 - 점수 계산 (0) | 2023.01.03 |
---|---|
[Python] 백준 풀기 11441 - 합 구하기 (0) | 2023.01.02 |
[Python] 백준 풀기 11728 - 배열 합치기 (0) | 2022.12.31 |
[Python] 백준 풀기 11655 - ROT13 (0) | 2022.12.30 |
[Python] 백준 풀기 2941 - 크로아티아 알파벳 (0) | 2022.12.29 |