2501๋ฒ: ์ฝ์ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ N๊ณผ K๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. N์ 1 ์ด์ 10,000 ์ดํ์ด๋ค. K๋ 1 ์ด์ N ์ดํ์ด๋ค.
www.acmicpc.net
โ๏ธ ๋ฌธ์ ์์ฝ
๋ ์์ฐ์ N๊ณผ K๊ฐ ์ฃผ์ด์ก์ ๋ N์ ์ฝ์๋ค ์ค K๋ฒ์งธ๋ก ์์ ์๋ฅผ ์ถ๋ ฅํ๋ผ.
๐ช ๋ฌด์ํ๊ฒ ํ๊ธฐ
์ฐ์ ๋ง๊ทธ๋๋ก K๋ฒ์งธ ์ฝ์๋ฅผ ๊ตฌํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๊ฐ์ฅ ๋จผ์ ๋ ์ฌ๋๋ค.
K๋ฒ์งธ ์ฝ์๋ ์ด๋ป๊ฒ ๊ตฌํ ์ ์์๊นโ
cnt ๋ณ์๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ ์ ์๋ค.
1๋ถํฐ N๊น์ง i๋ก ์ํํ๋ฉด์ N์ i๋ก ๋๋ ๋ชซ์ด 0์ด๋ผ๋ฉด i๋ N์ ์ฝ์์ธ ๊ฒ์ด๋ค. ์ด๋ cnt๋ฅผ 1 ์ฆ๊ฐํ๋ค.
์ด๋ฅผ ๋ฐ๋ณตํ์ฌ K๋ฒ์งธ ์ฝ์๋ฅผ ๊ตฌํ๋ค.
๋ง์ฝ K๋ฒ์งธ ์ฝ์๊ฐ ์๋ค๋ฉด ์ถ๋ ฅ ํ break๋ก ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋๊ฐ๊ณ , ๋๊น์ง ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋๊ฐ์ง ๋ชปํ๋ค๋ฉด else ๋ฌธ์์ 0์ ์ถ๋ ฅํ๋ค.
N, K = map(int, input().split())
cnt = 0
for i in range(1, N+1):
if N % i == 0:
cnt += 1
if cnt == K:
print(i)
break
else:
print('0')
์ด ์ฝ๋์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด๋ค.
๐ฏ ์ต์ ํ
์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์ ์ต์ ํ๊ฐ ๋์ ํ ๋ ์ค๋ฅด์ง ์์ ์์ฌ์ด๋๋ก ๊ธฐ์กด ์ฝ๋๋ฅผ ์์๊ฒ(?) ๋ณ๊ฒฝํด๋ดค๋ค.
N, K = map(int, input().split())
cnt = 0
for i in range(1, N+1):
if N % i != 0: # i๊ฐ N์ ์ฝ์๊ฐ ์๋๋ผ๋ฉด ๋์ด๊ฐ๊ธฐ
continue
cnt += 1
if cnt == K:
print(i)
break
else:
print('0')
๐ค ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ํ๊ตฌํด๋ณด๊ธฐ
์ฝ์๋ง ์ถ์ถํ ๋ฆฌ์คํธ์ [0]*10000 ์ ์ด์ด๋ถ์ธ๋ค.
N์ ๋ฒ์๊ฐ 10000 ์ดํ๋๊น ์ฝ์์ ๊ฐ์๊ฐ K๋ณด๋ค ์์์ ๋ 0์ด ์ถ๋ ฅ๋ ์ ์๋๋กโ๏ธ
์์ฑ๋ ๋ฆฌ์คํธ์ K-1๋ฒ์งธ ์์๋ฅผ ์ถ๋ ฅํ๋ค.
N, K = map(int, input().split())
print(([i for i in range(1, N+1) if N % i == 0] + [0] * 10000)[K-1])
๊ต์ฅํ ํ์ด์จ๋ํ ์ฝ๋๊ฐ๋ค.
์ฝ์๋ง ์ถ์ถํ ์๊ฐ์ ํ๋๋ฐ, ๊ทธ ๋ค์ [0]*10000 ์ ์ด์ด๋ถ์ฌ ์ฝ์๊ฐ K๊ฐ ์ดํ์ผ ๋ 0์ด ์ถ๋ ฅ๋ ์ ์๋๋ก ํ ๋ฐ์์ด ์๋ก์ ๋ค. ๐ฒ
์ ์ฝ๋์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด๋ค.
'๐ซ ETC > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณผ์ ์งํํ๊ธฐ (0) | 2023.09.27 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ (0) | 2023.09.25 |
[ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ์ ํ๋ฒ์ค (0) | 2023.09.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํผ์ ๋๊ธฐ์ ๋ฌ์ธ (0) | 2023.09.22 |
[BOJ] 3460. ์ด์ง์ (0) | 2023.09.22 |