정직하게 문제에서 알려준 것을 list로 구현하는 코드를 작성했더니 시간 초과 오류가 발생했다.
import sys
input = sys.stdin.readline
n = int(input().rstrip())
lst = [(i+1) for i in range(n)]
l = len(lst)
for _ in range(2, l):
lst.remove(lst[0])
num = lst[0]
lst.remove(num)
lst.append(num)
lst.remove(lst[0])
print(lst[0])
이후 뭔가 특별한 규칙이 있음을 유추할 수 있었고 고민해보다가 코드를 작성했다.
# n = 1 -> output = 1 = (1-0)
# n = 2 -> output = 2 = (2-1)*2
# n = 3 -> output = 2 = (3-2)*2
# n = 4 -> output = 4 = (4-2)*2
# n = 5 -> output = 2 = (5-4)*2
# n = 6 -> output = 4 = (6-4)*2
# n = 7 -> output = 6 = (7-4)*2
# n = 8 -> output = 8 = (8-4)*2
import sys
input = sys.stdin.readline
i = 1
n = int(input().rstrip())
if (n == 1):
print(1)
else:
while (i < n):
i *= 2
i = i // 2
print((n - i) * 2)
처음에 생각했던 list 방법에서 queue 구조를 응용해서 코드를 만들어도 해결할 수 있었다. 대신 시간 초과 오류를 해결하기 위해 deque를 import해왔다.
from collections import deque
import sys
input = sys.stdin.readline
n = int(input().rstrip())
deque = deque([(i+1) for i in range(n)])
l = len(deque)
for _ in range(1, l):
deque.popleft()
num = deque.popleft()
deque.append(num)
print(deque[0])
'백준' 카테고리의 다른 글
[백준] 9012번 파이썬 (괄호) (0) | 2024.02.22 |
---|---|
[백준] 2609번 파이썬 (최대공약수와 최소공배수) (0) | 2024.02.19 |
[백준] 1929번 파이썬 (소수 구하기) (0) | 2024.02.18 |
[백준] 1874번 파이썬 (스택 수열) (0) | 2024.02.18 |
[백준] 1654번 파이썬 (랜선 자르기) (0) | 2024.02.18 |