https://www.acmicpc.net/problem/1966
from sys import stdin
T = int(stdin.readline())
for _ in range(T):
N, M = map(int, stdin.readline().split())
q = list(map(int, stdin.readline().split()))
nums = [i for i in range(N)]
i = 0
while i < N:
if i+1 < N and q[i] < max(q[i+1:]):
q.append(q.pop(i))
nums.append(nums.pop(i))
else:
i += 1
print(nums.index(M)+1)
(우선순위, 인덱스) 형태로 저장하고
min-heap, deque, ... 써봤는데 잘 안됐다...ㅎ
그래서 그냥 우선순위가 담긴 리스트 q 와 문서의 번호를 담은 nums 두개의 리스트를 사용
문서의 순서가 바뀔 때마다 q 와 nums 동시에 변경하도록 함
우선순위 값을 하나씩 보면서 자신 이후에 큰 값이 존재하면
q 와 nums 모두 pop 한 후 맨 뒤에 다시 append
큰 값이 없다면 다음 값 확인하러 넘어감 => i += 1
nums 에서 M 의 위치 + 1
을 print 해주면 된다
max(q[i+1:])
에서 slicing 하지 않고https://www.acmicpc.net/problem/1676
from sys import stdin
N = int(stdin.readline())
ans = 0
five = 5
while five <= N:
for n in range(five, N+1, five):
ans += 1
five *= 5
print(ans)
전에 leetcode 에서 비슷한 문제 풀었던 게 생각났다
0 의 개수는 곧 2*5 = 10
의 개수와 관련이 있다
=> 2 는 5 보다 무조건 많은 개수를 가지니까 생각하지 않고 오직 5 의 개수만 세주기
이 때, 25, 50, 75, ... 와 같이 5 가 여러개 있는 숫자 처리 주의
=> 25 = 5 * 5
, 50 = 5 * 5 * 2
, ...
따라서 5 의 제곱수들의 배수까지 모두 세줌
처음엔 5 부터 시작해서 5 의 배수 모두 세주고
그 다음엔 25 (5 의 제곱) 부터 시작해서 25 의 배수 모두 세주고, 125 ...