https://sdoram.tistory.com/187
1. 백준-시리얼 번호
문제점
https://www.acmicpc.net/problem/1431
시도해 본 것들
문제 파악하기
# 길이 순 정렬
# 수의 합이 작은 것
# 사전 순
우선순위는 위와 같이 되지만 코드는 뒤에 나오는 정렬이 덮어쓰기 때문에 사전 순 정렬 먼저 하기
수의 합 만들기
key=lambda serial: sum([int(s) for s in serial if s.isdigit()]
어렵지 않게 바로 작성해서 나름 뿌듯한 코드
key에 길이 전달하기
serial_list = sorted(serial_list, key=lambda serial: len(serial))
# Lambda may not be necessary
lambda를 이용해서 len을 key로 만들었는데 pylint에서 lambda가 굳이 필요없다는 밑줄을 띄웠다.
serial_list = sorted(serial_list, key=len)
찾아본 결과 key=len을 사용하면 lambda없이 간단하게 사용할 수 있었다.
해결 방법
serial_list = []
for _ in range(int(input())):
serial_list.append(input())
serial_list = sorted(serial_list)
serial_list = sorted(
serial_list, key=lambda serial: sum([int(s) for s in serial if s.isdigit()])
)
serial_list = sorted(serial_list, key=len)
print("\n".join(serial_list))
serial_list = []
for _ in range(int(input())):
serial_list.append(input())
serial_list = sorted(
serial_list,
key=lambda serial: (
len(serial),
sum([int(s) for s in serial if s.isdigit()]),
serial,
),
)
print("\n".join(serial_list))
sorted()를 한번만 사용했지만 시간은 오히려 더 소요됐다.
아마도 len(serial)과 serial이 lambda없이 바로 정렬이 가능한데 하나만 사용하는 과정에서 lambda를 거치도록 만들어서 그런 것 같다.
알게 된 점
스스로 선언하지 않아도 python 내부에서 사용가능한 방법이 있다면 최적화가 잘 되어있을 가능성이 높다.
길이를 기준으로 sorted()할 때는 key=len으로 하자
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-06-16 백준 색종이 (0) | 2023.06.16 |
---|---|
TIL 23-06-15 대체 url 코드 (0) | 2023.06.15 |
TIL 23-06-11 백준-듣보잡 (0) | 2023.06.11 |
TIL 23-06-09 serializer 고민하기 (0) | 2023.06.09 |
TIL 23-06-08 최종 팀 프로젝트 환경 변수 이슈&pagination (0) | 2023.06.08 |