[BOJ][๐ก1][๋ฐฑ์ค#01016] ์ ๊ณฑ ใดใด ์
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold I
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ด๋ค ์ ์ X๊ฐ 1๋ณด๋ค ํฐ ์ ๊ณฑ์๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ ๋, ๊ทธ ์๋ฅผ ์ ๊ณฑใดใด์๋ผ๊ณ ํ๋ค. ์ ๊ณฑ์๋ ์ ์์ ์ ๊ณฑ์ด๋ค. min๊ณผ max๊ฐ ์ฃผ์ด์ง๋ฉด, min๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , max๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๊ณฑใดใด์๊ฐ ๋ช ๊ฐ ์๋์ง ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ ์ min๊ณผ max๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ min๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , max๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๊ณฑใดใด์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ํ
1 โค min โค 1,000,000,000,000 min โค max โค min + 1,000,000
์์
์์ 1
์ ๋ ฅ
1 10
์ถ๋ ฅ
7
์์ 2
์ ๋ ฅ
15 15
์ถ๋ ฅ
1
์์ 3
์ ๋ ฅ
1 1000
์ถ๋ ฅ
608
My Sol
mn, mx = map(int, input().split())
check = [1]*(mx-mn+1)
sqr_n = 2
while sqr_n**2 <= mx:
sqr_nn = sqr_n**2
k = (mx//sqr_nn)*sqr_nn
while k >=mn:
check[k-mn] = 0
k -= sqr_nn
sqr_n += 1
print(sum(check))
- ์๋ผํ ์คํ
๋ค์ ์ฒด๋ฅผ ์ ์ฉํ๊ธฐ ์ํด ์ ๊ณฑ ใดใด ์๋ฅผ 0์ผ๋ก ์ฒดํฌํ ๋ฐฐ์ด
check
๋ฅผ ๋ง๋ ๋ค. - ์ ๊ณฑ์์ ์์์ 2์ ์ ๊ณฑ๋ถํฐ ํ์ฌ 1์ฉ ๋๋ ค๊ฐ๋ฉฐ ์ ๊ณฑ์๋ก ๋๋์ด ๋จ์ด์ง๋ ์๋ค์ 0์ผ๋ก ์ฒดํฌํด์ค๋ค.
- ์ด ๋ฐ๋ณต์ ์ ๊ณฑ์์ ๊ฐ์ด mx๋ฅผ ๋์ด์๋ ์๊ฐ๊น์ง ์งํํ๋ค.
- ์ต๋๊ฐ(
mx
)์ ์ ๊ณฑ์(sqr_nn
)๋ก ๋๋ ๋ชซ์ ์ ๊ณฑ์๋ก ๋ค์ ๊ณฑํ๋ค. ์ด๋ mx๋ฅผ ๋์ง ์๋ ๊ฐ์ฅ ํฐ์ ๊ณฑใ ใ ์
์ด๋ค. ์ด ์๋ถํฐ ์ ๊ณฑ์sqr_nn
๊ฐ๊ฒฉ์ผ๋ก k๋ฅผ ๋ฎ์ถฐ์ค๋ค. - ์ด ๋ฐ๋ณต์ k๊ฐ
mn
๋ฏธ๋ง์ผ๋ก ๋จ์ด์ง ๋๊น์ง ๋ฐ๋ณตํ๋ค. - ์ด๋ ๊ฒ
check
๋ฐฐ์ด์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ๊ฐ๋ ์ผ๋ก ๊ฑธ๋ฌ๋ด์ฃผ๋ฉด, check์๋ ์ ๊ณฑ ใดใด ์๋ง 1๋ก ์ฒดํฌ๊ฐ ๋๋ค. - ์ด๋ฅผ ๋ชจ๋ ๋ํ ๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ