๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/BOJ

[BOJ] ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด (#2960)

 

 

๋ฌธ์ œ 

 

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ชจ๋“  ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ์œ ๋ช…ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. 2๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ชจ๋“  ์ •์ˆ˜๋ฅผ ์ ๋Š”๋‹ค.
  2. ์•„์ง ์ง€์šฐ์ง€ ์•Š์€ ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๊ฒƒ์„ P๋ผ๊ณ  ํ•˜๊ณ , ์ด ์ˆ˜๋Š” ์†Œ์ˆ˜์ด๋‹ค.
  3. P๋ฅผ ์ง€์šฐ๊ณ , ์•„์ง ์ง€์šฐ์ง€ ์•Š์€ P์˜ ๋ฐฐ์ˆ˜๋ฅผ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ์ง€์šด๋‹ค.
  4. ์•„์ง ๋ชจ๋“  ์ˆ˜๋ฅผ ์ง€์šฐ์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋‹ค์‹œ 2๋ฒˆ ๋‹จ๊ณ„๋กœ ๊ฐ„๋‹ค.

N, K๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, K๋ฒˆ์งธ ์ง€์šฐ๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

์ž…๋ ฅ 

 

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K < N, max(1, K) < N ≤ 1000)

 

์ถœ๋ ฅ 

 

์ฒซ์งธ ์ค„์— K๋ฒˆ์งธ ์ง€์›Œ์ง„ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

ํ•ด์„ค ์ฝ”๋“œ 
N,K = map(int,input().split())
array = ["True"]*(N+1)
cnt=0
print(array)
for i in range(2,N+1):
  for j in range(i,N+1,i):
    if array[i] != False:
      array[i] = False
      cnt += 1
      if cnt == K:
        print(j)
๋ถ„์„ > ์šฐ์„  index๊ฐ€ 0๋ถ€ํ„ฐ N+1๊นŒ์ง€์ธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์˜ ์›์†Œ๋Š” ๋ชจ๋‘ True๋กœ ์ง€์ •ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ index๊ฐ€ 2๋ถ€ํ„ฐ n+1๊นŒ์ง€ i์˜ ํฌ๊ธฐ๋งŒํผ (i, i + 1* i, i + 2* i ...) ์›์†Œ๋ฅผ false๋กœ ๋ฐ”๊พธ๋ฉด์„œ ๊ทธ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋‹ค๊ฐ€ ํšŸ์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ K์™€ ๋™์ผํ•ด์ง€๋ฉด ๊ทธ๋•Œ์˜ j ์ฆ‰ ์ง€์›Œ์ง„ ์ˆซ์ž๋ฅผ ํ”„๋ฆฐํŠธํ•œ๋‹ค.