๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1747)
<์์&ํฐ๋ฆฐ๋๋กฌ>
๋ฌธ์
์ด๋ค ์์ ๊ทธ ์์ ์ซ์ ์์๋ฅผ ๋ค์ง์ ์๊ฐ ์ผ์นํ๋ ์๋ฅผ ํฐ๋ฆฐ๋๋กฌ์ด๋ผ ๋ถ๋ฅธ๋ค. ์๋ฅผ ๋ค์ด 79,197๊ณผ 324,423 ๋ฑ์ด ํฐ๋ฆฐ๋๋กฌ ์์ด๋ค.
์ด๋ค ์ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์ด์ก์ ๋, N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , ์์์ด๋ฉด์ ํฐ๋ฆฐ๋๋กฌ์ธ ์ ์ค์์, ๊ฐ์ฅ ์์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
if __name__=='__main__':
arr=[True]*2000000
line=int((2000000)*0.5)
arr[1]=False
n=int(input())
for i in range(2, line+1): # ์์ ํ๋ณ
if arr[i]==True:
for j in range(i+i, 2000000, i):
arr[j]=False
flag=False
for i in range(n, 2000000):
cnt = 0
if arr[i]==True: # ์์์ด๋ฉด
i = str(i)
for j in range(len(i)//2): # ํฐ๋ฆฐ๋๋กฌ
if i[j]==i[len(i)-1-j]:
cnt+=1
else:
break
if cnt==len(str(i))//2:
print(i)
flag=True
break
if flag==True:
break
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ํ์ฉํ์ฌ ์์๋ฅผ ํ๋ณํด์ค๋๋ค. ๊ทธ๋ค์ N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ ์ค ์์๋ผ๋ฉด ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ์ธํด์ค๋๋ค.
ํฐ๋ฆฐ๋๋กฌ์ด๋ผ๋ฉด ๊ทธ ์๋ฅผ ์ถ๋ ฅํด์ค ํ ์ข ๋ฃํฉ๋๋ค.
- N ์ ๋ ฅ
- ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ณ
- N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฐ ์ค ํฐ๋ฆฐ๋๋กฌ ํ์ธ -> ํฐ๋ฆฐ๋๋กฌ์ด๋ผ๋ฉด ๊ฐ ์ถ๋ ฅ ํ ์ข ๋ฃ
๊ฐ๋จํ ๋ฌธ์ ์์ง๋ง ์ ์ด๋ ๊ฒ ๋ง์ด ํ๋ ธ๋๊ฐ?
โ ํ๋ฆฐ ์ด์ ๋?
1. N ์ ๋ ฅ์ด 1000000์ด๋ผ๊ณ ํ์ผ๋ฏ๋ก ์ถ๋ ฅ ๊ฐ์ผ๋ก๋ 1000000 ์ด์์ ๊ฐ์ด ๋์ฌ ์ ์๋ค. ํ์ง๋ง ์ฒ์์ ๊ตฌํํ ์ฝ๋์์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฒ์๋ฅผ 1000000์ผ๋ก ์ค์ ํ์ฌ ํ๋ ธ๋ ๊ฒ์ด๋ค.
2. ๋ฌธ์ ์์ 'N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ '๋ผ๊ณ ํ ๋ถ๋ถ์ ๋์ณค๊ธฐ ๋๋ฌธ์ด๋ค. N๋ณด๋ค ํฐ ๊ฐ์ ๊ตฌํ๋๋ก ์ฝ๋๋ฅผ ๊ตฌํํ์์ผ๋ฏ๋ก ํ๋ ธ๋ ๊ฒ์ด๋ค.
3. 1์ ์ ๋ ฅ๊ฐ์ผ๋ก ๋ฃ์์ ๋ 1์ด ๋์ค๋ฉด ์ ๋๋ค. 1์ ์์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. 1์ ์์๊ฐ ์๋(False) ๊ฐ์ผ๋ก ์ค์ ํด์ค์ผ ํ๋ค.
์์ ๊ฐ์ด 3๊ฐ์ ๋ฌธ์ ์ ์ ๊ณ ์ณค๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
์๊ฐ๐ค
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2638_์น์ฆ (0) | 2022.04.27 |
---|---|
[Baekjoon] 1303_์ ์ - ์ ํฌ (0) | 2022.04.26 |
[Baekjoon] 1743_์์๋ฌผ ํผํ๊ธฐ (0) | 2022.04.21 |
[Baekjoon] 1926_๊ทธ๋ฆผ (0) | 2022.04.20 |
[Baekjoon] 12851_์จ๋ฐ๊ผญ์ง 2 (0) | 2022.04.18 |