1. Problem
2. Others' Solutions
import sys
n = int(sys.stdin.readline())
seq = list(map(int,sys.stdin.readline().rstrip().split()))
stack = []
result = [-1] * n
count = [0] * 1000001
for i in seq:
count[i] += 1
for i in range(n):
while stack and count[seq[stack[-1]]] < count[seq[i]]:
result[stack.pop()] = seq[i]
stack.append(i)
print(' '.join(map(str,result)))
1. Problem
2. My Solution
import sys
test_n = int(sys.stdin.readline())
for _ in range(test_n):
m,n,x,y = map(int,sys.stdin.readline().rstrip().split())
x = x % m
y = y % n
year = 1
while(True):
if (year % m) == x and (year % n) == y:
print(year)
break
elif (year % m) == 0 and (year % n) == 0:
print(-1)
break
else:
year += 1
3. Others' Solutions
import sys
test_n = int(sys.stdin.readline())
for _ in range(test_n):
m,n,x,y = map(int,sys.stdin.readline().rstrip().split())
target = x - 1
year = 1 + target
x = x % m
y = y % n
while(True):
if (year % m) == x and (year % n) == y:
print(year)
break
elif year > m * n:
print(-1)
break
else:
year += m
import sys
import math
test_n = int(sys.stdin.readline())
for _ in range(test_n):
m,n,x,y = map(int,sys.stdin.readline().rstrip().split())
x, y = x % m, y % n
max_year = (m * n) // math.gcd(m,n)
res = -1
for year in range(x, max_year+1, m):
if (year % n) == y:
res = year
break
print(res)
4. Learned
ex) M N = 12 10 일때
- year = 0 으로 시작해서 결과를 출력할 때 year+1 을 출력
(x,y 를 입력받으면 각각 -1해서 12 10 전 11 9 까지만 수행)
x = 11, y = 1 이면 10,0 이 나와야함
10 % 12 = 10, 10 % 10 = 0 이므로 맞음
- 입력되는 목표 x,y 를 M,N 으로 % 연산한뒤 다시 M,N에 대입함
(12, 10 을 입력받으면 % 연산 수행수 0,0 이 되기때문에 비교할 때도 0,0 으로 비교되게끔)
M = x % M
N = y % N