리나 Dev토리

백준 10773번 : 제로 (파이썬) 본문

자료구조&알고리즘

백준 10773번 : 제로 (파이썬)

리나lina 2022. 3. 30. 02:15

알고리즘 도토리반 스택 문제

👩‍💻 백준 10773번 제로 

https://www.acmicpc.net/problem/10773

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

내가 구현한 방법은

파이썬의 리스트를 활용하여 스택처럼 사용하였다.

숫자가 들어오면 리스트에 추가하고, 0이 들어오면 맨 뒤에꺼를 삭제하는 방식으로 풀었다.

n = int(input()) # 입력하는 숫자의 갯수
lst = []

for _ in range(n):
    num = int(input())
    if num != 0:  # 0이 아니면 그 숫자를 저장
        lst.append(num)
    else:  # 0이 나오면, 마지막에 저장한 숫자를 빼주기
        lst.pop()

print(sum(lst))​

같은 코드인데 pypy3로 제출해보니

소요시간이 1/10 이하로 줄어 속도가 11.5배나 빨라진 것을 확인할 수 있었다.👀

pypy3은 JIT 컴파일(Just In Time)이라는 방식을 도입하였고, 지금도 유럽연합의 지원을 받아 개발중이다.

 JIT 컴파일이란 프로그램 시작전에 컴파일을 하는 대신에, 프로그램을 실행하는 시점에 즉석에서 컴파일하는 방식이다. 인터프리터 언어의 성능 향상을 목적으로 도입한다.  인터프리트하면서 자주쓰이는 코드를 캐싱하여 속도가 빨라진다.

참고: https://ralp0217.tistory.com/entry/Python3-와-PyPy3-차이

 

복잡한 코드, 반복이 많이되는 코드를 사용할 때는

pypy3로 제출하면 속도 향상이 가능하다.

Comments