โ 9613 GCD ํฉ โ
import sys
input=sys.stdin.readline
from itertools import combinations
def gcd(a,b): #a<=b
while a>0:
a,b=b%a,a
return b
for _ in range(int(input())):
ans = 0
pairs = list(combinations(list(map(int, input().split()))[1:], 2))
for pair in pairs:
ans += gcd(pair[0], pair[1])
print(ans)
๐ฆ ์ต๋๊ณต์ฝ์ GCD๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ฒ ์๋์ ๊ฐ์ด 3๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
โ math module ๋ด์ฅํจ์ ์ฌ์ฉ
โก ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ฌ์ฉ (๋ณ๋ gcd ํจ์ ๋ฐ๋ก ๋ง๋ค๊ธฐ / ์ฌ๊ท)
โข ์ ์ - ๊ณต์ฝ์ ์ค ์ต๋๊ฐ
โป ์ ์๋ก ์ ์ฑ์ง ์ค ํ๋ [์ ํด๋ฆฌ๋ ํธ์ ๋ฒ]์ ์ฌ์ฉํด GCD๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด ์ ์๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ๋ณด๋ค ์ฑ๋ฅ์ด ๋น ๋ฅด๋ค
๐ฆ itertools์ combinations(๋๋ ๋ ๋ฒ for loop ๋๋ ค๋ ๋๋ค)๋ก ๊ฐ๋ฅํ ๋ชจ๋ pair ๊ตฌํ ๋ค, ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ ์ฉํ๋ฉด ๋!
โ 10610 30 โ
import sys
input=sys.stdin.readline
N = list(map(int, input().rstrip()))
if sum(N)%3 == 0 and 0 in N:
N.sort(reverse=True)
print(int(''.join(map(str,N))))
else:
print('-1')
๐ฆ 30์ ๋ฐฐ์ ํ์ ๋ฒ → 10์ ๋ฐฐ์ (0์ด ์กด์ฌํ๋ ์ง ํ๋ณ) + 3์ ๋ฐฐ์ (3์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 0)
โ 6872 RSA Numbers โ
def if_RSA(n):
cnt=0
end=int(n**(1/2))
for i in range(1,end+1):
if n%i==0:
if i!=(n//i): cnt+=2
else: cnt+=1
if cnt==4:return True
else:return False
a=int(input())
b=int(input())
ans=0
for n in range(a,b+1):
if if_RSA(n):ans+=1
print(f'The number of RSA numbers between {a} and {b} is {ans}')
๐ฆ ์ฝ์ ํ์ ์ ์ ์ฒด ์๊น์ง ๋๋ฆด ํ์ ์๊ณ , ์ ์ฒด ์์ root ๋ฒ์๊น์ง๋ง ๋๋ฆฌ๋ฉด ๋๋ค(์๊ฐ๋ณต์ก๋ O(N) → O(root(N)). ์ด ๋, ์ ๊ณฑ์์ผ ๊ฒฝ์ฐ ์นด์ดํ ๋๋ฏ๋ก, ์ฝ์์ ๊ฐ์๋ 1๋ง ์ถ๊ฐํด์ฃผ๊ณ , ๋๋จธ์ง ์๋ 2๊ฐ์ฉ cnt ๋ณ์ ์ฆ๊ฐ์์ผ์ฃผ๋ฉด ๋!
โ 14650 ๊ฑท๋ค๋ณด๋ ์ ์ฒ์ญ ์ผ (Small) โ
N=int(input())
print(0 if N==1 else 2*3**(N-2))
๐ฆ ์ ์๋ก ) 3์ ๋ฐฐ์๋ ๋ชจ๋ ์์ ํฉ์ด 3์ ๋ฐฐ์์ด๋ค
๐ฆ dp๋ฅผ ์ ์ฉํ๋ฉด, N์๋ฆฌ 3์ ๋ฐฐ์ ๊ฐ์๋ฅผ a(n)์ด๋ผ๊ณ ํ๋ค๋ฉด,
a(n) = a(n-1)*3 (n ≥ 3; a(1) = 0, a(2) = 2)
โ a(n-1)์์ ์ด๋ฏธ ๋ง๋ค์ด์ง 3์ ๋ฐฐ์๋ค ์ค, 3์ ๋งจ ์๊ณผ ๋งจ ๋ค์ ๋ถ์ธ๋ค๋ฉด ์ ์๋ก ์ฑ์ง์ ์ํด 3์ ๋ฐฐ์๊ฐ ๋๋ค.
ex) 121212๊ฐ ์์ ๋, ๋งจ ์์ 3์ ๋ถ์ธ 3121212 ๋๋ ๋งจ ๋ค์ 3์ ๋ถ์ธ 1212123์ ๋ชจ๋ 3์ ๋ฐฐ์
โก a(n-1)์์ ์ด๋ฏธ ๋ง๋ค์ด์ง 3์ ๋ฐฐ์๋ค ์ค, 0์ ๋งจ ๋ค์ ๋ถ์ธ๋ค๋ฉด ์ ์๋ก ์ฑ์ง์ ์ํด 3์ ๋ฐฐ์๊ฐ ๋๋ค.
ex) 121212๊ฐ ์์ ๋, ๋งจ ๋ค์ 0์ ๋ถ์ธ 1212120๋ 3์ ๋ฐฐ์
∴ ์ฆ, ์ด๋ฏธ ์์์ ๋ง๋ค์ด์ง ์ 121212์์ ์ด 3๊ฐ์ง์ ๊ฒฝ์ฐ๋ก 3์ ๋ฐฐ์๋ฅผ ๋ง๋ค ์ ์์ผ๋ฏ๋ก x3์ ํด์ค๋ค!
∴ 3๋ง ๊ณ์ ๊ณฑํด์ง๋ฏ๋ก ๋ฑ๋น์์ด๋ก ์ ํ์์ด ์๋, ๋ฑ๋น์์ด ๊ณต์์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
a(n) = 2 * 3^(n-1) (n ≥ 3)
โ 14651 ๊ฑท๋ค๋ณด๋ ์ ์ฒ์ญ ์ผ (Large) โ
N=int(input())
print(0 if N==1 else ((2*3**(N-2))%(1_000_000_009)))
โ 1735 ๋ถ์ ํฉ โ
a1,b1=map(int,input().split())
a2,b2=map(int,input().split())
A,B=a1*b2+a2*b1,b1*b2
def gcd(a,b): #a<=b
while a>0:
a,b=b%a,a
return b
k=gcd(A,B)
print(A//k,B//k)
๐ฆ ๋ ๋ถ์์ ํฉ์ ๊ตฌํ๊ณ , ๋ถ์์ ๋ถ๋ชจ ๊ฐ๊ฐ ์ต๋๊ณต์ฝ์๋ก ๋๋ ๊ฒฐ๊ณผ์ธ ๋ถ์์ ๋ถ๋ชจ๋ก ์ด๋ฃจ์ด์ง ๋ถ์๊ฐ ์ต์ข ๋ต. ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ๋, ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ฌ์ฉ: ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ - ํฐ ์๋ฅผ ์์ ์๋ก ๋๋ ๋๋จธ์ง์ ์์ ์๋ฅผ ๊ณ์ ๋ฐ๋ณต - ์ต์ข ์ ์ผ๋ก ์์ ์๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณต
โ 13241 ์ต์๊ณต๋ฐฐ์ โ
A,B=map(int,input().split())
a,b=max(A,B),min(A,B)
while b!=0:
if a%b==0:
a=b
break
a,b=b,a%b
print(A*B//a)
๐ฆ A*B = G*L์ด๋ผ๋ ๊ณต์, ์ฆ ๋ ์์ ๊ณฑ์ ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์์ ๊ณฑ์ด๋ผ๋ ๊ฒ๋ง ์ ํํ ์๋ฉด, ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ผ๋ก ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ณ ๋ฐ๋ก ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ ์ ์๋ค! ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ํฐ ์์์ ์์ ์๋ก ๋๋๊ณ ์์ ์๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณต, ์ด ๋ ๋์ค์ b๊ฐ a์ ๋๋์ด์ง๋ฉด b ์์ฒด๊ฐ ์ต๋๊ณต์ฝ์๊ฐ ๋๋ฏ๋ก ๋ฐ๋ก break ํ์ถํด ์ต๋ํ ์๊ฐ ๋จ์ถ
โ 13909 ์ฐฝ๋ฌธ ๋ซ๊ธฐ โ
๐ฆ ์ฐฝ๋ฌธ์ ์ด๊ณ ๋ซ๋ ํ์๊ฐ ํ์ ๋ฒ์ด์ด์ผ ์ต์ข ์ ์ผ๋ก ์ด๋ฆฐ๋ค. ์ด๊ณ ๋ซ๋ ํ์๋ ์ฝ์์ ๊ฐ์๋ฅผ ๋ปํ๋ฏ๋ก, ์ฝ์์ ๊ฐ์๊ฐ ํ์ ๊ฐ๋ผ๋ ๊ฑด, ๊ณง ์ ๊ณฑ์์์ ๋ปํ๋ค. n์ดํ์ ์ ๊ณฑ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋!
โ 1929 ์์ ๊ตฌํ๊ธฐ โ
M,N=map(int,input().split())
#์๋ผํ ์คํ
๋ค์ค์ ์ฒด
l=[True]*N #๋จผ์ True
end=int(N**0.5) #์ ๊ณฑ๊ทผ๊น์ง๋ง iteration
#l=[1,2,3,~,N]์ด๊ณ [T,T,~,T] array
#l's index [0,1,2,~N-1]
for i in range(2,end+1): #i์์ฒด๊ฐ ์์ํ์ ๋์ number - i's iteration
if l[i-1]==True: #index๋ i-1
for k in range(i-1,N,i):l[k] = False #i์ ๋ฐฐ์๊ฐ ๋๋ ๋ชจ๋ number False
l[i-1]=True #๋ ์์ ์ True๋ก
ans=[i+1 for i in range(1,N) if l[i] == True] #l's [2,3,~,N]์์ True ๊ณ ๋ฅด๊ธฐ
print(*[i for i in ans if i>=M],sep='\n') #์ด ์ค M์ด์์ธ๊ฒ๋ง ๊ณ ๋ฅด๊ธฐ
๐ณ๐ปโ๏ธ ์์ ํ๋ณ๋ฒ์ ๋ค์ ์์ฝํ๋ฉด,
โ 2๋ถํฐ (์๊ธฐ์์ -1)๊น์ง ๋ชจ๋ ์๊ธฐ์์ ์์ ๋๋์์ ๋ ๋๋จธ์ง๊ฐ 0์ด ์๋๋ค → ์์์ ์ ์๋ฅผ ์ด์ฉ O(N)
โก ์ฝ์์ ๊ฐ์๊ฐ 2์ด๋ค → O(N)
โข ์ฝ์์ ๊ฐ์๊ฐ 2์ด๋ค - ๊ฒ์ฌ๋ฒ์ N์ ์ ๊ณฑ๊ทผ๊น์ง → O(root(N))
โฃ ์ฝ์์ ๊ฐ์๊ฐ 2์ด๋ค - ๊ฒ์ฌ๋ฒ์ N/2๊น์ง → O(N)
โค ์๋ผํ ์คํ ๋ค์ค์ ์ฒด → O(Nlog(logN)))
โฅ 2์ 3 ์ ์ธ ์์๋ 6์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 1 ๋๋ 5
๐ณ๐ปโ๏ธ ์ ๋ฌธ์ ๋ฅผ ๋ง์๋ ค๋ฉด โค ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
โ ์ด N๊ฐ์ True๊ฐ์ด ์ ํ ์๋ array ์์ฑ
โก True๋ผ๊ณ ์ ํ ์์๋ถํฐ(1 ์ ์ธ) N๊น์ง ํด๋น ์์์ ๋ฐฐ์๋ค ๋ชจ๋ False๋ก ๋ฐ๊ฟ
(๋จ, ์๊ธฐ ์์ ์ ๋ค์ True๋ก ๋ฐ๊ฟ)
โป ์ ์ฒด N๊น์ง ๋ ํ์ ์๊ณ root(N)์ ๋ด๋ฆผํ ์์ฐ์๊น์ง ๋๋ฉด ๋จ
โข 1 ์ ์ธ True๋ผ๊ณ ์ ํ ๋ชจ๋ ์์๋ค์ด N์ดํ์ ์์๋ค
๐ณ๐ปโ๏ธ ์ ์ฝ๋ ํ์ด
โ ์ด N๊ฐ์ True๊ฐ ๋ด๊ธด list + ํ์ ๋ end๋ N์ ์ ๊ณฑ๊ทผ๊น์ง
โก i๋ ํ์ ์๋ก, 2๋ถํฐ end๊น์ง for๋ฌธ ์ค์
โข index๋ i-1๋ก, l[i-1] ๊ฐ์ด True๋ผ๋ฉด, ํด๋น ์์น๋ถํฐ index ๊ธฐ์ค N-1๊น์ง (์ฆ, ์๋ก๋ i๋ถํฐ N๊น์ง) i์ฉ ์ ํํ๋ฉฐ, ์ ํ๋๋ ๊ณณ์ i์ ๋ฐฐ์์ด๋ฏ๋ก False ์ค์
โฃ ์ฌ๊ธฐ์ ์์์ ์์ฒด๋ ๋ค์ True๋ก ์ค์
โค ์๋ฃ! True์ธ ๊ฒ๋ง ๋นผ์ ๋ณ๋ list ์ค์ ํ๊ณ M์ด์์ธ ๊ฒ๋ง ๊ณจ๋ผ์ ์ถ๋ ฅ!
โ 2960 ์๋ผํ ์คํ ๋ค์ค์ ์ฒด โ
N,K=map(int,input().split())
l=[True]*N
s=0
y=0
for i in range(2,N+1):
if l[i-1] == True:
for k in range(i-1,N,i):
if l[k]==True:
l[k]=False
s+=1
if s==K:
y=1
print(k+1)
break
if y==1: break
๐ณ๐ปโ๏ธ False๊ฐ ๋๋, ์ํ๋ ์์์ ๋ง๋ ์ง์์ง๋ ์๋ฅผ ์ฐพ์ ์ถ๋ ฅํ๋ฉด ๋! + greedyํ๊ฒ, ์ํ๋ K๋ฒ์งธ ์๋ฅผ ์ฐพ์์ผ๋ฉด ๋ด๋ถ for๋ฌธ break + flag ๋ณ์๋ก ๋ฐ๊นฅ for๋ฌธ break ์ค์
โ 9842 Prime โ
n=int(input())
N=110000
#Sieve of Eratosthenes (size of N)
arr=[True]*N
arr[0]=False
for i in range(2,N+1):
if arr[i-1]==True:
for j in range(i-1,N,i):arr[j]=False
arr[i-1]=True
primes_arr=[i+1 for i in range(1,N) if arr[i]==True]
print(primes_arr[n-1])
๐ณ๐ปโ๏ธ ์ต๋ 10000๊ฐ์ ์์๋ฅผ ๋ด์ ์ ์๋ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ๋ฒ์๋ ์์ฐ์ 104729๊น์ง๋ผ๊ณ ํ๋ค! ใ ใ
โ 6219 ์์์ ์๊ฒฉ โ
A,B,D=map(int,input().split())
arr=[True]*B
arr[0]=False
end=int(B**(1/2))
cnt=0
for i in range(2,end+1):
if arr[i-1]==True:
for j in range(i-1,B,i):arr[j]=False
arr[i-1]=True
for n in range(A-1,B):
if arr[n] == True and str(D) in str(n+1): cnt+=1
print(cnt)
๐ณ๐ปโ๏ธ ํฌ๊ธฐ B์ ํด๋นํ๋ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ๋ง๋ ๋ค, ์ฒด์ index+1์ด ๊ณง ํ์ ๋์์ธ ์ซ์๊ฐ ๋๊ณ , ์ฒด์ ๋ด์ฉ์ด T/F์ด๋ฏ๋ก ์ด๋ฅผ ์ ์ ํ range()๋ฌธ์ผ๋ก ํ๋ณํ๋ฉด ๋!
โ 4948 ๋ฒ ๋ฅดํธ๋ ๊ณต์ค โ
import sys
input=sys.stdin.readline
def Sieve_of_Eratosthenes(N):
arr=[True]*(N+1)
arr[0],arr[1]=False,False
end=int(N**(1/2))
for i in range(2,end+1):
if arr[i] == True:
for j in range(i,N+1,i):
arr[j] = False
arr[i] = True
return arr
while True:
N = int(input())
if N == 0: break
sieve = Sieve_of_Eratosthenes(2*N)
print(sum(sieve)-sum(sieve[:N+1]))
๐ณ๐ปโ๏ธ 2n๊น์ง์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ๋ง๋ค๊ณ , n๊น์ง์ ๋ฒ์ True ๊ฐ์ ๋นผ๋ฉด ๋!
โ 4134 ๋ค์ ์์ โ
import sys
input=sys.stdin.readline
N=int(input())
def isPrime(n):
end=int(n**(1/2))
for i in range(2,end+1):
if n%i==0:
return False
return True
for _ in range(N):
x = int(input())
if x <= 1: print(2)
else:
while True:
if isPrime(x):
print(x)
break
x+=1
๐ณ๐ปโ๏ธ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ โข ($\sqrt{N}$) ์ฌ์ฉ
โ 24039 2021์ ๋ฌด์์ด ํน๋ณํ ๊น? โ
import sys
sieve=[True]*(10_001)
sieve[0],sieve[1]=False,False
for x in range(2,int(len(sieve)**(1/2))+1):
if sieve[x]:
for y in range(x,len(sieve),x):
sieve[y]=False
sieve[x]=True
primes=[]
for x in range(len(sieve)):
if sieve[x]:
primes.append(x)
N=int(input())
x=N
while 1:
x+=1
for y in range(2,int(x**(1/2))+1):
if x%y==0 and sieve[y]:
k=primes.index(y)
if x==(y*primes[k+1]):
print(x)
sys.exit()
๐ณ๐ปโ๏ธ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ํ์ฉํด์ ์ฐ์ํ ์์์ ๊ณฑ ํ๋ณ ํ๋ฒ์ ์ฝ๊ฒ!
โ 1476 ๋ ์ง ๊ณ์ฐ โ
E,S,M=map(int,input().split())
if E == 15: E = 0
if S == 28: S = 0
if M == 19: M = 0
share=-1
while True:
share+=1
N=share*15+E
if N%28==S and N%19==M and N > 0:
print(N)
break
๐ณ๐ปโ๏ธ 15, 28, 19๋ก ๋๋ ๋๋จธ์ง๊ฐ E, S, M์ธ N์ ์ถ๋ ฅ(๋จ E, S, M์ด 15, 28, 19์ผ ๋๋ 0์ผ๋ก ์ค์ )
โ 2485 ๊ฐ๋ก์ โ
import sys,math
input=sys.stdin.readline
N=int(input())
ts=sorted([int(input()) for _ in range(N)])
Is=[ts[i]-ts[i-1] for i in range(1,N)]
cur=Is[0]
for interval in Is[1:]: cur = math.gcd(cur,interval)
print(((ts[-1]-ts[0])//cur+1)-N)
๐ณ๐ปโ๏ธ ๊ฐ๋ก์๋ค ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ต๋๊ณต์ฝ์๋งํผ ๊ฐ๊ฒฉ์ผ๋ก ๊ฐ๋ก์๋ฅผ ์ฌ์ด์ผ ๊ฐ๋ก์ ๊ฐ๊ฒฉ์ด ๋ชจ๋ ๋์ผ. ์ฌ๋ฌ ๊ณต์ฝ์ ์ค ์ต๋๊ณต์ฝ์์ ๊ฐ๊ฒฉ์ด ๊ณง ์ฌ์ ์ ์๋ ๊ฐ๋ก์๋ฅผ ์ต์๊ฐ์ผ๋ก ์ฌ์ ์ ์๊ฒ ๋๋ค.
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ DP Intermediate I - 20 Solvedโ (0) | 2022.12.22 |
---|---|
โ Sorting Upper-Intermediate I - 6 Solvedโ (1) | 2022.12.20 |
โ Stack & Queue & Deque Intermediate I - 20 Solvedโ (0) | 2022.12.11 |
โ Recursion Intermediate - 2 Solvedโ (0) | 2022.12.11 |
โ Binary Search Intermediate I - 7 Solvedโ (0) | 2022.12.07 |
๋๊ธ