티스토리 뷰

[백준 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/

 

파이썬: 자료형 별 연산자의 시간복잡도(Big-O) 정리

시간복잡도

duri1994.github.io

☞ 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