본문 바로가기

개발일지/TIL

TIL 23-06-13 백준-시리얼 번호

https://sdoram.tistory.com/187

 

최종 팀 프로젝트[back] 통합 검색 filter

https://github.com/sdoram/b4_exhibitions_backend GitHub - sdoram/b4_exhibitions_backend: B4조 지금은 전시상황 백엔드 B4조 지금은 전시상황 백엔드 . Contribute to sdoram/b4_exhibitions_backend development by creating an account on GitHu

sdoram.tistory.com

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으로 하자