๐Ÿ’ซ ETC/Problem Solving

[BOJ] 2501. ์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ

ming412 2023. 9. 20. 01:20
 

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)์ด๋‹ค.