๐Ÿงฉ Algorithm/[BOJ] Bronze

[BOJ] 2501. ์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ (Python/Bronze 3)

devCloud 2024. 11. 15. 14:25
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‰ https://www.acmicpc.net/problem/2501


ํ’€์ด ๋ฐฉ๋ฒ•

์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ

  • N์˜ ์•ฝ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ฐพ๊ธฐ ์œ„ํ•ด 1๋ถ€ํ„ฐ N์˜ ์ œ๊ณฑ๊ทผ ๊นŒ์ง€์˜ ์ˆ˜ i๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • ๋งŒ์•ฝ i๊ฐ€ N์˜ ์•ฝ์ˆ˜๋ผ๋ฉด i ์™€ N / ๋ฅผ ์•ฝ์ˆ˜ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋•Œ, i์™€ N /  ๊ฐ€ ๊ฐ™์ง€ ์•Š์œผ๋ฉด ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‘˜ ๋‹ค ์ถ”๊ฐ€ํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด N์ด 36์ผ ๋•Œ, ์•ฝ์ˆ˜๋กœ 6์ด ๋‘ ๋ฒˆ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ •๋ ฌ

  • ์•ฝ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ฐพ์€ ํ›„, ์ž‘์€ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜์—ฌ K๋ฒˆ์งธ ์ž‘์€ ์•ฝ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.

์ถœ๋ ฅ

  • ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ K ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด, ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์—์„œ K ๋ฒˆ์งธ ์•ฝ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ K ๋ณด๋‹ค ์ ๋‹ค๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

โœ”๏ธ ์ •๋ ฌ ๋ฐฉ๋ฒ•

sorted(divisor)
  • ๋ฆฌ์ŠคํŠธ ํ˜น์€ ๋ฌธ์ž์—ด ๋“ฑ์„ ๋‚ด์žฅํ•จ์ˆ˜๋กœ ์ด์šฉํ•ด ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • sort(), sorted() ๋‚ด์žฅ ํ•จ์ˆ˜๊ฐ€ ์žˆ๊ณ , ๋””ํดํŠธ ๊ฐ’์€ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋‹ค.
  • ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ์ธ์ž๋กœ reverse = True ๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

Solution

N, K = map(int, input().split())
divisor = []  # ์•ฝ์ˆ˜๋ฅผ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ
for i in range(1, int(N**0.5) + 1):
    if N % i == 0:
        divisor.append(i)
        if N // i != i:
            divisor.append(N // i)

if len(divisor) >= K:
    print(sorted(divisor)[K - 1])
else:
    print(0)

 

๐Ÿ“Œ ์ฃผ์˜ํ•  ์ 

  • ์ฐพ์•„์•ผ ํ•  K ๋ฒˆ์งธ๋ณด๋‹ค ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ž‘์œผ๋ฉด 0์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์กฐ๊ฑด 
  • ์•ฝ์ˆ˜ ๊ฐœ์ˆ˜ ๊ธฐ์ค€์œผ๋กœ ์กฐ๊ฑด์„ ๋‚˜๋ˆŒ ๋•Œ ์•ฝ์ˆ˜ ๊ฐœ์ˆ˜์™€ K๊ฐ€ ๊ฐ™์€ ๊ฒƒ๋„ K๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์•ฝ์ˆ˜(๋ชซ๊ณผ ๋‚˜๋จธ์ง€)๊ฐ€ ๊ฐ™์€ ์ˆ˜์ผ ๊ฒฝ์šฐ ํ•˜๋‚˜๋งŒ ์•ฝ์ˆ˜ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

์œ„์˜ ์ฃผ์˜ํ•  ์ ๋“ค์€ ๋‚ด๊ฐ€ ๋ฏธ์ฒ˜ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•˜๊ณ  ํ’€์–ด์„œ ํ•œ๋ฒˆ์— ์ œ์ถœ์ด ์‹คํŒจํ–ˆ๋˜ ์ด์œ ๋ฅผ ๋ชจ์•„๋†“์€ ๊ฒƒ์ด๋‹ค. 


 

728x90