일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Selenium
- Python
- flask
- 파이썬
- to shp
- 코랩 런타임
- 크롤링
- Crawling
- python buildpacks
- 해시태그
- 인스타그램
- plotly dash
- kmeans
- 백준
- 플라스크
- NLP
- 웹페이지
- Merge Repositories
- convert to shp
- geoDataFrame
- 괄호 문제
- 셀레니움
- Chat-GPT
- string to list
- 혁신성장부문
- 알고리즘
- 2164 카드2
- geopandas
- colab runtime
- clustering
Archives
- Today
- Total
코딩코딩코딩
백준(BAEKJOON) 2164 카드2 - 파이썬(python) 본문
리스트의 첫 원소를 지우고 그 다음 원소를 맨 뒤로 보내는 간단한 문제였다.
처음에는 list의 pop과 append를 사용했었는데 시간초과가 떠서 다시 찾아보니
deque를 사용해서 풀어야 하는 문제였다.
처음 풀었던 것처럼 list.pop(0)을 하게되면 뒤에 남은 원소들을 모두 앞으로 땡겨오기 때문에 시간복잡도가 O(N)이 되는 반면에
deque의 leftpop을 사용하면 제거하고 뒤 원소들의 메모리를 건드리지 않기 때문에 시간복잡도가 O(1)이 되어 속도면에서 압도적이다.
N의 크기가 커질수록 deque의 성능이 우수해지며, 특히 left관련 함수의 경우에 차이가 두드러진다.
num = int(input())
from collections import deque
cards = deque(range(1, num+1))
while len(cards) > 1:
cards.popleft()
cards.append(cards.popleft())
print(cards[0])
### 시간초과
# cards = [i for i in range(1, num+1)]
#
# while True:
# if len(cards) != 1:
# cards.pop(0)
# cards.append(cards.pop(0))
# else:
# print(cards[0])
# break
'파이썬 > Algorithms' 카테고리의 다른 글
백준(BAEKJOON) 1110 더하기 사이클 - 파이썬(python) (0) | 2021.04.27 |
---|---|
백준(BAEKJOON) 1181 단어정렬 - 파이썬(python) (0) | 2021.04.12 |
백준(BAEKJOON) 9012 괄호 - 파이썬 (0) | 2021.04.10 |
백준(BAEKJOON) 1966 프린터큐 (0) | 2021.02.13 |
백준(BAEKJOON) 1052 단어의 개수 (0) | 2021.01.15 |
Comments