백준 실버 3 1431 시리얼 번호 - python
https://www.acmicpc.net/problem/1431
1431번: 시리얼 번호
첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어
www.acmicpc.net
코드
맞았습니다가 뜬 코드입니다. - 메모리 31256KB | 시간 84ms | 코드 길이 1179B
import sys
num = '1234567890'
N = int(sys.stdin.readline().rstrip())
serial_num = []
for i in range(N):
serial_num.append(sys.stdin.readline().rstrip())
for i in range(N-1):
for j in range(i+1, N):
if len(serial_num[i]) > len(serial_num[j]): # 문자열 길이 비교
serial_num[i], serial_num[j] = serial_num[j], serial_num[i]
elif len(serial_num[i]) == len(serial_num[j]): # 문자열 길이 같다면 -> 숫자총합 비교
sum_i = 0
sum_j = 0
for x in serial_num[i]:
if x in num:
sum_i += int(x)
for y in serial_num[j]:
if y in num:
sum_j += int(y)
if sum_i > sum_j: # 숫자총합 비교
serial_num[i], serial_num[j] = serial_num[j], serial_num[i]
elif sum_i == sum_j: # 총합 같다면 -> 사전 순 비교
for x, y in zip(serial_num[i], serial_num[j]):
if x > y: # 사전 순 비교
serial_num[i], serial_num[j] = serial_num[j], serial_num[i]
break
elif x < y:
break
for i in serial_num:
print(i)
세번 비교하면 되는 복잡스러운 정렬문제였습니다.
Search 🔍
다른 분의 코드를 참고하여 가져와봤습니다.
https://hongcoding.tistory.com/61 (출처)
import sys
num = '1234567890'
N = int(sys.stdin.readline().rstrip())
def sum_num(inputs):
result = 0
for i in inputs:
if i in num:
result+=int(i)
return result
arr = []
for i in range(N):
a = input()
arr.append(a)
arr.sort(key = lambda x:(len(x), sum_num(x), x))
for i in arr:
print(i)
파이썬의 이중리스트 정렬함수는 key에 lambda를 주는 것이 특징인데, 뒤에 나오는 x:다음에는 어떤 기준으로 정렬할지가 나옵니다.
한개의 기준을 사용할 때에는 x:x[0]( 각 배열에 대해 0번째 인덱스를 기준으로 오름차순 정렬) 이런식으로 배열 x에 대한 오름차순 정렬을 합니다.
여러개의 기준을 사용할 때에는 코드처럼 괄호를 사용하여 기준을 넣습니다.
후기
한문제만 더 풀면 100문제 달성입니다! ㅎㅎ 100문제 달성하면 그룹을 만들까했는데 학기중에 멘토링 활동때문에 제가 꾸준히 못할 것 같아서 지금은 못하겠고요.. 언젠가 다른 사람들과 스터디 열어서 같이 활동하게 되면 좋을 것 같습니다. ㅎㅎ
'코딩테스트' 카테고리의 다른 글
[백준] 14241 슬라임 합치기 - python (1) | 2023.02.01 |
---|---|
[백준] 1449 수리공 항승 - python (1) | 2023.02.01 |
[백준] 2312 수 복원하기 - python (2) | 2023.01.31 |
[백준] 20309 트리플 소트 - python (0) | 2023.01.30 |
[백준] 3182 한동이는 공부가 하기 싫어! - python (0) | 2023.01.30 |