티스토리 뷰
[백준 10814]
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
[내 코드]
n = int(input())
info = {}
for i in range(0, n):
x, y = input().split() # ==> x, y = sys.stdin.readline().rstrip().split()
x = int(x)
if x in info.keys():
info[x].append(y)
else:
info[x] = [y]
for k,v in sorted(info.items()):
for i in range(len(v)):
print(k, v[i])
코드 자체도 길지 않고, 그냥 평범하게 잘 짜지 않았나? 싶었는데, 채점 시간이 엄청 오래 걸리길래 당황했다.
나와 시간이 비슷하게 나오신 분들도 있었지만,
내 컴파일 시간의 1/20정도 밖에 안 걸리시는 분들이 몇몇 계시길래 그 비결이 무언가 봤더니,
readline() 바로 요놈 때문이었다!
반복적으로 사용자로부터 값을 입력받을 때, input을 사용하면 동작속도가 매우 느려진다고 한다.
따라서 다음과 같이 라이브러리를 import하여 사용해주면 된다.
import sys #라이브러리 추가 후
T = sys.stdin.readline().rstrip() #rstrip()은 우측의 개행 문자 \n을 잘라냄
T1, T2 = sys.stdin.readline().rstrip().split() #공백을 기준으로 두가지 값을 입력받을때
그 효과는 대단했다!!
두 채점 결과 중 아래 있는 것은 input을 사용하여 입력을 받았을 때고,
위에 있는 것은 readline을 통해 값을 입력받을 때이며 그 외의 다른 점은 없다.
이 한 줄의 코드로 성능이 확 높아진 것 같다!
이 문제와 더불어 현재 시간초과로 인해 애먹고 있는 1920번 문제 때문에, 파이썬의 각 자료형별 메소드에 따른 시간 복잡도가 잘 설명되어있는 사이트를 알아왔다. 개발자로서 성능 이슈는 언제나 신경써야하는 부분인 것 같다.
https://duri1994.github.io/python/algorithm/python-time-complexity/
☞ set/dictionary는 삽입,제거,탐색,포함여부 확인할 때
☞ list는 순서가 있거나 index로 요소에 접근할 필요가 있을 때
구현하고자 하는 알고리즘에 맞게 자료형을 고를 것!!!
'Etc > Algorithm & Solving' 카테고리의 다른 글
[Algorithm] 이진 탐색 (Binary Search) (0) | 2022.02.26 |
---|---|
[Python] 백준 1181 (0) | 2022.02.04 |
[Python] 백준 10809 (0) | 2022.01.28 |
[Python] 백준 2908 (0) | 2022.01.27 |
[Python] 백준 2920 (0) | 2022.01.27 |
Comments