โ 18291 ๋น์๋จ์ ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ โ
import sys
input=sys.stdin.readline
def power_divide_conquer(a,b,c):
if b==1:
return a%c
halved = power_divide_conquer(a,b//2,c)
if b%2==0:
return ((halved%c) * (halved%c)) %c
else:
return ((halved%c) * (halved%c) * (a%c))%c
BIG = 1000000007
for _ in range(int(input())):
N=int(input())
if N==1:
print(1)
elif N==2:
print(1)
else:
print(power_divide_conquer(2,N-2,BIG)%BIG)
๐ฃ ์ง๊ฒ๋ค๋ฆฌ์ ๊ฐ์๋ฅผ X๋ผ๊ณ ํ ๋ 1๋ฒ ๋ค๋ฆฌ๋ถํฐ X๋ฒ ๋ค๋ฆฌ๊น์ง ๊ฑด๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ .
: P(n)์ 1๋ฒ์์ n๋ฒ ๋ค๋ฆฌ๊น์ง ๊ฑด๋ ๊ฒฝ์ฐ์ ์๋ผ๊ณ ํ๋ค๋ฉด, 1๋ฒ์์ X๋ฒ๊น์ง ๊ฐ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ 1๋ฒ์์ 1๋ฒ๊น์ง ๊ฑด๋ ๋ชจ๋ ๊ฒฝ์ฐ(1๋ฒ์์ X๋ฒ๊น์ง ํ ๋ฒ์) + 1๋ฒ์์ 2๋ฒ๊น์ง ๊ฑด๋ ๋ชจ๋ ๊ฒฝ์ฐ(2๋ฒ์์ X๋ฒ๊น์ง ํ ๋ฒ์) + .... 1๋ฒ์์ (X-1)๋ฒ๊น์ง ๊ฑด๋ ๋ชจ๋ ๊ฒฝ์ฐ(X-1๋ฒ์์ X๋ฒ๊น์ง ํ ๋ฒ์)์ด๋ฉฐ, P(n)์ ์ด์ฉํด์ ๋ํ๋ธ๋ค๋ฉด P(X) = P(1) + P(2) + P(3) + ... P(X-1)์ด๋ค.
๐ฃ P(1) = 1, P(2) = 1 ์ด๋ฏ๋ก P(3) = P(2) + P(1) =1 + 1 = 2 / P(4) = P(3) + P(2) + P(1) = 2 + 1 + 1 = 4 / P(5) = 4 + 2 + 1 + 1 = 8 .... / P(X) = 2 ^ (X-2)์์ ๊ท์น์ผ๋ก ์ ์ ์๋ค. ๋ฐ๋ผ์ 2^(X-2)๋ฅผ 1,000, 0007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ ๊ฒฐ๊ณผ๊ฐ ์ ๋ต
๐ฃ A^B์ C๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ๊ณผ์ ์, B๊ฐ ๋งค์ฐ ํด ๊ฒฝ์ฐ(์ ๋ฌธ์ ํ์ B<=10^9) ๋ถํ ์ ๋ณต์ ์ด์ฉํ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋ก ๊ตฌํ๋ค(๋ณ๋ ํฌ์คํ ์ฐธ์กฐ)
โ 5904 Moo ๊ฒ์ โ
def dc(numbers,order,center_num):
half_num = (numbers-center_num)//2
if order<=half_num:
dc(half_num,order,center_num-1)
elif (half_num+1)<=order<=(half_num+center_num):
if order == (half_num+1):
print('m')
return
else:
print('o')
return
else:
dc(half_num,order-(half_num+center_num),center_num-1)
N=int(input())
#k
k=3
bf=0
cum=3
while cum<N:
bf=cum
cum*=2
cum+=(k+1)
k+=1
if (N-bf)<=k:
if (N-bf) == 1:
print('m')
else:
print('o')
else:
numbers_in_a_cycle = cum-bf-k
order = N-bf-k
center_num = k-1
dc(numbers_in_a_cycle,order,center_num)
๐ฃ m o ..... o๋ฅผ ํ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณด๊ณ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ผ์ชฝ๋ถํฐ ๋์ดํ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
3 4 3 5 3 4 3 6 3 4 3 5 3 4 3 7 3 4 3 5 3 4 3 6 3 4 3 5 3 4 3 8 ...
์ด๋ฅผ ๊ทธ๋ฃนํํ์๋ฉด
โ ์ ๋ ฅ๋ฐ์ N์ด ์ด๋ ๊ทธ๋ฃน์ ์ํ๋ ์ง ๋จผ์ ํ๋จ. ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฐ ๊ทธ๋ฃน์ ๊ทธ๋ฃน ๋ด์ ์ต๋๊ฐ k๊ฐ ์๋ค. ์ฆ, k๋ฅผ ๊ตฌํ๋ค. k๋ฅผ ๊ตฌํ๊ณ ๋๋ฉด k๊ฐ ์ํ ๊ทธ๋ฃน์ ๋ถ์ํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค (ex k = 7)
โก group ๋ด์ 2๊ฐ์ง ์ผ์ด์ค๋ก ๋๋ ์ ์๋๋ฐ,
(1) N๋ฒ์งธ ํด๋น๋๋ ๋ฌธ์๊ฐ group ๋ด์ 1๋ฒ์งธ๋ถํฐ k๋ฒ์งธ ์์ ๋ค์ด๊ฐ ์๋ ๊ฒฝ์ฐ
(2) N๋ฒ์งธ ํด๋น๋๋ ๋ฌธ์๊ฐ group ๋ด์ (k+1)๋ฒ์งธ๋ถํฐ group ๋๊น์ง ๋ค์ด๊ฐ ์๋ ๊ฒฝ์ฐ
โข bf์ cum์ ๋จผ์ ๊ตฌํ๋ค. bf๋ ์ group๊น์ง์ ๋ชจ๋ ์ซ์ ๊ฐ์, cum์ ํ์ฌ ์ํด ์๋ group ๋๊น์ง์ ๋ชจ๋ ์ซ์ ๊ฐ์.
(1) - 1: (N-bf) == 1์ผ ๊ฒฝ์ฐ, group ๋ด์ ๋งจ ์ฒซ๋ฒ์งธ ์ด๊ธฐ์ ๋ฐ๋ก 'm' ์ถ๋ ฅ
(1) - 2: ์ (1)-1์ด ์๋ ๊ฒฝ์ฐ ๋ฐ๋ก 'o' ์ถ๋ ฅ
โฃ ์ (1)์ด ์๋ ๊ฒฝ์ฐ, ๋ถํ ์ ๋ณต ๊ธฐ๋ฒ์ผ๋ก m์ธ์ง o์ธ์ง ์์๋ด๋ฉด ๋๋ค. group๋ด์ ์์ k๊ฐ์ ๊ธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด center_num(k-1)์ ๊ธฐ์ ์ผ๋ก ์ข์ฐ๊ฐ ๋์ผ(๋ถํ ์ ๋ณต์ ์ฌ์ฉํ๊ธฐ์ ์๋ง๋ค)ํ๋ค. ๋ฐ๋ผ์ left + center_num + right์ cycle์ด๋ผ ์ ์ํ๊ณ ์๋์ ๊ฐ์ด 3๊ฐ๋ฅผ ๊ตฌํจ
(1) numbers_in_a_cycle: cycle ๋ด์ ๊ฐ์
(2) order: N๋ฒ์งธ ๊ธ์๊ฐ cycle ๋ด์์ ๋ช ๋ฒ์งธ์ ํด๋น๋๋ ์ง
(3) center_num: cycle ๋ด์ ์ค์ฌ์ด ๋๋, cycle๋ด์ ๊ฐ์ฅ ํฐ ์ต๋๊ฐ
โค ๊ทธ๋ฌ๋ฉด โฃ์์ ๊ตฌํ (1), (2), (3)์ ์ด์ฉํด ๋ถํ ์ ๋ณต ์งํ
(1) order๊ฐ center_num๋ณด๋ค ์ผ์ชฝ left part์ ์์นํด ์๋ค๋ฉด, (์ฆ ์ ๊ทธ๋ฆผ ๊ธฐ์ค 3 4 3 left part์ ์์นํด ์๋ค๋ฉด), left part๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ์ ๋ณต ์งํ
(2) order๊ฐ center_num์ ์์นํด ์๋ค๋ฉด (์ฆ ์ ๊ทธ๋ฆผ ๊ธฐ์ค 5์ ์์นํด ์๋ค๋ฉด), order๊ฐ half_num + 1์ผ ๊ฒฝ์ฐ 'm' ์ถ๋ ฅ, ๊ทธ๋ ์ง ์์ผ๋ฉด 'o' ์ถ๋ ฅ
(3) order๊ฐ center_num๋ณด๋ค ์ค๋ฅธ์ชฝ right part์ ์์นํด ์๋ค๋ฉด right part๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ์ ๋ณต ์งํ
: ์ฆ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด center๋ฅผ ๊ธฐ์ค์ผ๋ก ์ข์ฐ๊ฐ ๋์ผํ๋ฏ๋ก ์์นํด ์๋ ๋ถ๋ถ์ ๋ฐ๋ผ ์ข ๋๋ ์ฐ ๊ฐ๊ฐ์ ๋ถํ ์ ๋ณต ์งํ. ๊ณ์ divide ํด๋๊ฐ๋ค๊ฐ center_num part์ ์ํ ๋ m ๋๋ o (center_num part ๋งจ ์์ด๋ฉด m, ๊ทธ๋ ์ง ์์ผ๋ฉด o) ์ถ๋ ฅ
โ 2447 ๋ณ ์ฐ๊ธฐ - 10 โ
N=int(input())
ans=[['?']*N for _ in range(N)]
def star(N,x,y):
global ans
if N <= 1:
return
#(1) upper
for i in range(N//3):
for j in range(N):
ans[x+i][y+j] = '*'
#(2) middle
for i in range(N//3):
for j in range(N):
if 0<=j<N//3 or (N//3)*2<=j<N:
ans[x+(N//3)+i][y+j] = '*'
else:
ans[x+(N//3)+i][y+j] = ' '
#(3) below
for i in range(N//3):
for j in range(N):
ans[x+(N//3)*2+i][y+j] = '*'
star(N//3,x,y)
star(N//3,x,y+N//3)
star(N//3,x,y+(N//3)*2)
star(N//3,x+N//3,y)
star(N//3,x+N//3,y+(N//3)*2)
star(N//3,x+(N//3)*2,y)
star(N//3,x+(N//3)*2,y+N//3)
star(N//3,x+(N//3)*2,y+(N//3)*2)
star(N,0,0)
for l in ans:
print(*l,sep='')
๐ฃ ํฐ ํ์ ๊ท์น์ ์ฐพ๊ณ , ๋ถ๋ถ๋ถ๋ถ ๋๋์ด๊ฐ๋ฉด์(divide) ๋ฌด๋ฌ๋ฅผ ๊ท์น์ ์ผ๋ก ๊ทธ๋ฆฌ๋(conquer) ๋ฐฉ์์ผ๋ก ์งํ
โ ๋จผ์ ๋ชจ๋ ?๋ก ๋ง๋ค๊ณ ๋ ๋ค์, size N x N ์ ์ฌ๊ฐํ์์ ์ / ์ค๊ฐ / ์๋ ๊ฐ๊ฐ *๋ ๋น ์นธ์ผ๋ก ๋ฐ๊พธ๊ธฐ(ํ์ธํธ ์น ํ๊ธฐ)
โก ๊ทธ ๋ค์ ๋๋ฒ์งธ ์ค ์ค๊ฐ ํํธ๋ฅผ ์ ์ธํ๊ณ , ๋จ์ 8๊ฐ ํํธ์์ ๋์ผํ๊ฒ ์งํ(์ฌ๊ท์ ) (์ start(~) 8๊ฐ ์ฝ๋)
: ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ ์ฒด ์ฌ๊ฐํ์์ 1, 2, 3 ์์ชฝ์ ๋ชจ๋ *, ์ค๊ฐ์ 4์ 6 *, ๊ทธ๋ฆฌ๊ณ 5๋ง ๋น์นธ. 7, 8, 9๋ ๋ชจ๋ *. ์ดํ ํํธ 5๋ง ์ ์ธํ๊ณ ๋จ์ 8๊ฐ์ ํํธ(๋ถํ ๊ฒฐ๊ณผ) ๋ชจ๋ ๊ฐ๊ฐ ์ฌ๊ท๋ก ๋์ผํ๊ฒ ์ ๋ณต ์งํ. ๊ฒฐ๊ณผ size N์ด 1์ด ๋๋ฉด ์ข ๋ฃ.
๐ฃ size N์ ๋ง๊ฒ x,y ๊ฐ๊ฐ index๋ง ์ ํํ ๊ฐ์ผ๋ก ๋ฃ์ผ๋ฉด ๋
โ 15717 ๋กํ์ด์ด โ
def get_power_by_divisor(a,b,c):
if b == 1:
return a%c
else:
x = get_power_by_divisor(a,b//2,c)
if b%2 == 0:
return ((x%c) * (x%c))%c
else:
return ((x%c) * (x%c) * (a%c))%c
N = int(input())
if N == 0:
print(1)
elif N == 1:
print(1)
else:
print(get_power_by_divisor(2,N-1,10**9+7))
๐ฃ <18291 ๋น์๋จ์ ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ> ๋ฌธ์ ์ ์ ์ฌ
๐ฃ N์์์ ๊ฒฝ์ฐ์ ์๋ฅผ P(N)์ด๋ผ ํ๋ฉด P(1) + P(2) + ... + P(N-1) + 1์ด๋ค. ์ฆ, 1์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์ ๊ฐ๊ฐ์์ N-1์ ๋ํ๋ค๋ฉด N์ด ๋๋ค. 2๋ถํฐ N-1๊น์ง๋ ๋ง์ฐฌ๊ฐ์ง. ์ด ๋, N ์์ฒด์ ๊ฒฝ์ฐ์ ์ 1๊ฐ์ง ๋ ๋ํด์ค๋ค. P(1) = 1, P(2) = 2๋ฅผ ๋ฒ ์ด์ค๋ก P(N) = 2^(N-1)๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, ์ด ๋ ์ง์ N์ด ์ต๋ 10^12๋ก ๋งค์ฐ ํฌ๋ฏ๋ก ๋ถํ ์ ๋ณต์ ์ด์ฉํ ๊ฑฐ๋ญ์ ๊ณฑ์ ํ์ฉํด ๋ต์ ๊ตฌํ๋ฉด ๋๋ค.
โ 29578 ะกัะผะผะฐ ััะตะฟะตะฝะตะน โ
def pdq(a,b,c):
if b <= 1:
return a%c
halved = pdq(a,b//2,c)
if b%2==1:
return ((halved%c) * (halved%c) * (a%c))%c
else:
return ((halved%c) * (halved%c) )%c
n = int(input())
num = 1
cnt = 0
while cnt < n:
two = pdq(2,num,num)
four = (two*two)%num
three = pdq(3,num,num)
six = (three*two)%num
five = pdq(5,num,num)
if (1+two+three+four+five+six)%num == 0:
cnt+=1
ans=num
num+=1
print(ans)
๐ฃ 1 + 2^k + ... 6^k์ด k๋ก ๋๋์ด์ง๋ ์ง ์์๋ณด๋ ๋ฌธ์ . n๋ฒ์งธ ๋๋์ด์ง๋ ์์ธ k๋ฅผ ์ถ๋ ฅ. 2^k (mod k) ~ 6^k(mod k) ๊ฐ๊ฐ ๊ตฌํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋, 4^k(mod k)๋ 2^k(mod k) ๊ตฌํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณฑ, 6^k(mod k)๋ (2^k(mod k) * 3^k(mod k)) % k๋ก ์กฐ๊ธ ๋ ๋นจ๋ฆฌ ๊ตฌํ ์ ์๋ค. ์ค์ ๋ก๋ ๋ฐ์ด 2, 3, 5์ธ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ๋ง ๊ตฌํด๋ ok(๊ตฌํ ๋ k ์ง์๊ฐ ๋งค์ฐ ์ปค์ง ์ ์์ผ๋ฏ๋ก, (์ค์ n์ด ์ต๋ 65์ผ ๋ ์ง์ k๋ 44247์ด๋ค) ๋ถํ ์ ๋ณต์ ์ด์ฉํ ๊ฑฐ๋ญ์ ๊ณฑ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ)
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Topology Sort Advanced - 2 Solvedโ (0) | 2024.12.29 |
---|---|
โ Divide & Conquer Upper-Advanced I - 7 Solvedโ (0) | 2024.07.03 |
โ Math & Geometry Advanced I - 2 Solvedโ (0) | 2024.04.27 |
โ Implementation&Simluation Upper-Advanced I - 1 Solvedโ (0) | 2024.03.03 |
โ Stack & Queue & Deque Advanced I - 3 Solvedโ (0) | 2024.02.24 |
๋๊ธ