๐๋ฌธ์ ์ค๋ช
์ด๋ค ์์ฐ์ A๊ฐ ์ฃผ์ด์ง๋ค. ์ฌ๊ธฐ์ ์์ฐ์ B๋ฅผ ๊ณฑํ ๊ฒฐ๊ณผ๊ฐ ๊ฑฐ๋ญ์ ๊ณฑ์๊ฐ ๋๋ ์ต์์ B๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ๋ ฅ
- ์ฒซ ๋ฒ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ์ T ๊ฐ ์ฃผ์ด์ง๋ค.
- ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ ๋ฒ์งธ ์ค์๋ ํ๋์ ์์ฐ์ A(1≤A≤10**7) ๊ฐ ์ฃผ์ด์ง๋ค.
๐ก ๋ฌธ์ ํ์ด
์๊ฐ์ด๊ณผ๋ก ๋ง์ ์ด๋ ค์์ ๊ฒช์๋ ๋ฌธ์ ...
1์ฐจ์๋ - ์๊ฐ์ด๊ณผ
๋ฌธ์ ์ ๋์ด๋๊ฐ ๋์ง ์์ ๋จ์ํ๊ฒ 2๋ถํฐ A๊น์ง ๋๋์์ ๋ ๋๋ ํ์๊ฐ ํ์์ด๋ฉด ๊ณฑํด์ฃผ๋ ๋ฐฉ์(๋๋ ํ์๊ฐ ์ง์์ฌ์ผ ์ ๊ณฑ์๊ฐ ๊ฐ๋ฅ)์ผ๋ก ์ ๋ต์ ๋์ถํ๋ ค ํ์๋ค.
T = int(input())
for tc in range(T):
A = int(input())
res = 1
# items = dict()
for i in range(2, A+1):
if not A%i:
cnt = 1
A //= i
while True:
if not A%i:
cnt += 1
A //= i
else:
break
if cnt % 2:
res *= i
if A == 1:
break
print('#{} {}'.format(tc+1, res))
์์ฐ์ A์ ๋ฒ์๊ฐ 10**7 ๊น์ง์ด๋ค ๋ณด๋ ํฐ ์ซ์์ ๊ฒฝ์ฐ ์์ ๋ฐฉ๋ฒ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์ฌ ์ค๋ต!
โป ํ๊ท ์ ์ผ๋ก 100000๊ฐ์ ํ
์คํธ ์ผ์ด์ค ์ค 190๊ฐ๊ฐ ํต๊ณผํ์๋ค...
2์ฐจ์๋ - ์๊ฐ์ด๊ณผ
ํน์๋ํด์ ๋๋๋ ์์ ์ ํ์ง ์๊ณ ๋จ์ํ ์ซ์๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์ ์ ๊ณฑ์๋ฉด ์ถ๋ ฅํ๋๋ก ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
import math
T = int(input())
for tc in range(T):
A = int(input())
for i in range(1, A+1):
if A * i == int(math.sqrt(A * i)) ** 2:
print('#{} {}'.format(tc+1, i))
break
์์๋๋ก ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์๊ณ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ๋ณด๋ค ํจ์ฌ ์ ์ 60๊ฐ ๊ฐ๋์ ํ ์คํธ ์ผ์ด์ค๊ฐ ํต๊ณผ๋์๋ค.
3์ฐจ์๋ - ํด๊ฒฐ
๋ชจ๋ ํ ์คํธ ์ผ์ด์ค์์ 1๋ถํฐ A๊น์ง์ ๋ฒ์์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋ ๊ฒ์ด ์๊ฐ์ด๊ณผ์ ์์ธ์ด๋ผ๊ณ ์๊ฐํ์๋ค.
๋ฐ๋ผ์, ์์์ ๋ํด์๋ง A๊ฐ ๋๋์ด๋จ์ด์ง๋์ง ํ์ธํ๋ ค๊ณ ํ๋ค.
ex) 2๋ก ๋๋ ์ดํ์๋ 4, 6, 8.. ๊ณผ ๊ฐ์ ์ง์๋ ๋๋์ด์ง ์๊ฐ ์๋ค.
๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ๋ฐ๋ณตํด์ ์์๋ฅผ ๊ตฌํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ฏ๋ก ๊ฐ์ฅ ์๋จ์ 2๋ถํฐ 3162( = int(10000000 ** 0.5))๊น์ง์ ์์๋ฅผ ๋ด์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค.
- prime : 2๋ถํฐ 3162๊น์ง์ ์์๋ฅผ ๋ด์ ๋ฆฌ์คํธ
A ๊ฐ์ด ์ ๊ณฑ์์ด๋ฉด ๋ ์ด์ ์งํํ ํ์๊ฐ ์์ง๋ง ์ ๊ณฑ์๊ฐ ์๋๋ผ๋ฉด prime์ ์๋ ์์๊ฐ๋ค๋ก ํ๋์ฉ A๊ฐ์ด ๋๋์ด์ง๋์ง ํ์ธํ๋ค.
→ ์ ๊ณฑ์๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ฐ์ ํ์
๋๋์ด๋จ์ด์ง๋ ๊ฒฝ์ฐ A๊ฐ ์์ p์ ๋ํด์ ๋ช ๋ฒ์ ๋๋ ์ ์๋์ง ๊ฐ์๋ฅผ ํ์ ํ๋ค.
- cnt : ํน์ ์์๊ฐ ๋ช๋ฒ ๋๋์ด๋จ์ด์ง๋ ํ์ธํ๊ธฐ ์ํ ๋ณ์
- res : A์ ๊ณฑํ ๊ฒฐ๊ณผ๊ฐ ๊ฑฐ๋ญ์ ๊ณฑ์๊ฐ ๋๋ ์ต์์ ์์ฐ์(์์ฐ์ B)
์ดํ cnt์ ๊ฐ์ด ์ง์๋ฉด ์ ๊ณฑ๊ทผ์ด ๋ ์ ์์ง๋ง ํ์๋ฉด ํด๋น ์์๋ฅผ ๊ณฑํด์ค์ผ ์ ๊ณฑ๊ทผ์ด ๋๋ฏ๋ก res์ ํด๋น ์์(p)๋ฅผ ๊ณฑํด์ค๋ค
์๊ฐ์ ์ค์ด๊ธฐ ์ํด์ A๊ฐ ๋ ๋๋ ์ ์๋ ๋ค์์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ breakํด์ค๋ค.
- A == 1
- p > A
prime์ ์๋ ๋ชจ๋ ์์๋ก ๋๋์์์๋ ๋๋์ด๋จ์ด์ง์ง ์์๋ค๋ฉด ํด๋น ๊ฐ์ prime์ ์ต๋๊ฐ๋ณด๋ค ๋ ํฐ ์์๊ฐ์ด๋ฏ๋ก res์ ๊ณฑํด์ค๋ค.
์ฝ๋๋ ์๋์ ๊ฐ๋ค
prime = [2]
for i in range(3, int(10000000 ** (0.5)), 2):
for p in prime:
if not i % p: break
else:
prime.append(i)
answer = []
T = int(input())
for tc in range(T):
A = int(input())
res = 1
if A**0.5 != int(A**0.5):
for p in prime:
cnt = 0
while not A % p:
A //= p
cnt += 1
if cnt % 2:
res *= p
if A == 1 or p > A:
break
if A > 1:
res *= A
answer.append('#{} {}'.format(tc+1, res))
for ans in answer:
print(ans)
์ฌ์ค ์์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ง ์์ฑํด๋ ๋ ๊ฒ ๊ฐ์๋ฐ ํ ์คํธ ์ผ์ด์ค๊ฐ 10๋ง๊ฐ๋ค๋ณด๋ ๋ฐ๋ณต๋ฌธ์ ํตํ ์ถ๋ ฅ๋ฌธ์์ ์๋นํ ์๊ฐ์ ์ก์๋จน๋๋ค.
์ด๋ด ๊ฒฝ์ฐ ํ๋์ ๋ฆฌ์คํธ์ ๊ฒฐ๊ณผ๊ฐ์ ์ ๋ถ ๋ด์ ๋ค์ ํ๋์ฉ ์ถ๋ ฅํด์ฃผ๋ฉด ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
- ans : ๋ฌธ์ ์์ ์ํ๋ ์ถ๋ ฅ๋ฌธ(#tc๋ฒํธ ์์ฐ์B)์ ๋ด๋ ๋ฆฌ์คํธ
โ ๋ฌธ์ ๋ฅผ ํ๊ณ ๋ ํ...
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํธ๋ ์น ์ฌ์ดํธ๋ค์ด ๋ง์๋ฐ(Programmers, ๋ฐฑ์ค, SWEA ๋ฑ)
๊ฐ ์ฌ์ดํธ์์ ์ ์ถํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค๋ณด๋ ์ด๋ ค์์ ๊ฒช์ ๋๊ฐ ์๋ค.
โป ๋ฌธ์ ์คํ์ผ๋... ๋ง์ด ๋ค๋ฅธ๊ฒ ๊ฐ๋ค.
ex) ํ๋ก๊ทธ๋๋จธ์ค๋ ํจ์์ ์ธ์๋ก ์ ๋ ฅ์ ๋ฐ์ ํจ์ ๋ฒ์ ๋ด์์ ํ์ด, SWEA๋ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ์ ๋ ฅ์ ๋ฐ์ ๋ฌธ์ ๋ฅผ ํ์ด
๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ์ค๋ฅผ ์ ์ธํ ๋ฐฑ์ค, SWEA์์๋ ์ ๋ ฅ๊ฐ์ ๋ฐ๋ ๋ถ๋ถ๊ณผ ๋ต์ ์ถ๋ ฅํ๋ ๋ถ๋ถ์์ ์ต์ ํ(์๊ฐ ๋จ์ถ)๊ฐ ๊ฐ๋ฅํ๋ค.
์ ๋ฌธ์ ์์๋ ans์ ์ถ๋ ฅํ๋ ๋ด์ฉ์ ๋ด์ ํ ๋ฒ์ ์ถ๋ ฅํจ์ผ๋ก์ ์๊ฐ์ด๊ณผ๋ฅผ ํด๊ฒฐํ๋ค.
๋ฐฑ์ค์์๋ ๋น ๋ฅธ ์ ๋ ฅ์ ๋ฐ์ ์ ์๋๋ก sys.stdin.readline() ์ฌ์ฉ์ ์๊ตฌํ๋ ๋ฌธ์ ๊ฐ ์์๋ค.
๋ฌผ๋ก ํ์ด์ฌ์์ ๋น ๋ฅธ ์
์ถ๋ ฅ์ ๊ณต๋ถํ๋ ๊ฒ๋ ์ข์ง๋ง ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ ์๊ฐ์ด๊ณผ๋ ๋จ์ ์
์ถ๋ ฅ์ด ์๋
์๊ณ ๋ฆฌ์ฆ ๊ณผ์ ์์์ ์๊ฐ ๋ณต์ก๋๋ง ๋ค๋ค์ผ๋ฉด ์ข๊ฒ ๋ค..๐
'Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] SWEA : 1486. ์ฅํ์ด์ ๋์ ์ ๋ฐ by Python (2) | 2021.02.03 |
---|---|
[Algorithm] SWEA : 10726. ์ด์ง์ ํํ by Python (3) | 2020.12.10 |
๋๊ธ