๋ฐฑ์ค 4948๋ฒ python ํ์ด (with for-else)
๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ธฐ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๋น์ทํ ๋ฌธ์ ๋ค์ด ๋ฌถ์ฌ์๊ธฐ์
์ด์ ๋ฌธ์ ๋ค์ ํ๊ณ ๋์ ํด๋น ๋ฌธ์ ๋ ์ฝ๊ฒ ํ ์ ์์์ค ์์๋ค
ํ์ง๋ง ์๊ฐ์ด๊ณผ๊ฐ ์๊พธ ๋์ ์ง๋ฌธ๊ฒ์ํ์ ๋ค์ ธ๋ดค๋ค
<์ด๊ธฐ์ฝ๋>
import math
def find_prime(m):
if m == 0 or m == 1:
return False
for i in range(2, int(math.sqrt(m)) + 1):
if m % i == 0:
return False
return True
while True:
l = []
n = int(input())
if n == 0:
break
else:
for i in range(n+1, 2*n+1):
if find_prime(i):
l.append(i)
print(len(l))
๋ฐ๋ณต๋ฌธ์ด ๊ณ์๋๋ฉด ๋งค๋ฒ ์์๋ฅผ ์๋ก ์ฐพ์์ผํ๊ธฐ์ ๊ทธ ๋ถ๋ถ์์ ์๊ฐ์ด ์ด๊ณผ๋ ๊ฒ
=> ์ด๋ฏธ ํน์ ๋ฒ์์์ ์์๋ฅผ ์ฐพ์๋ค๋ฉด ๋ ๋ค์ ํจ์๋ฅผ ํตํด ์์๋ฅผ ์ฐพ์ง์๊ณ
๋ฏธ๋ฆฌ ๋ฐ๊ฒฌ๋ ์์๋ฅผ ๋ฐ๊ฒฌ์์ ๋์ ๋๋ฆฌ์ ์ ์ฅํ์ฌ ๋์ ๋๋ฆฌ์์ ์ฐพ์์ ์นด์ดํธํจ
์ ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๋ค๊ฐ ๋ฆฌ์คํธ์์ ์ฐพ๋ ๊ฒ๋ณด๋ค ํ์ด์ฌ์์ ๋์ ๋๋ฆฌ๊ฐ ํจ์ฌ ๋น ๋ฅด๋ค๋ ๊ฒ์ ๋ณธ ์ ์ด ์์
=> ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋๊ฒ ์ด๋ ต์ง ์์ผ๋ฉด ์ด์์ด๋ฉด ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉ
(ํน์ ํ ํค๊ฐ์ ์ง์ ํ์ง ๋ชปํ๊ณ ์ธ๋ฑ์ค ํธ์ถ์ด ํ์ํ ๊ฒฝ์ฐ ๋ฆฌ์คํธ ์ฌ์ฉ)
<์ค๊ฐ์ฝ๋1>
import sys, math
def find_prime(m):
if m == 0 or m == 1:
return False
for i in range(2, int(math.sqrt(m)) + 1):
if m % i == 0:
return False
return True
while True:
d = {}
n = int(sys.stdin.readline())
c = 0
if n == 0:
break
else:
for i in range(n+1, 2*n+1):
if i in d:
if d[i] == True:
c += 1
else:
if find_prime(i):
d[i] = True
c += 1
print(c)
๋์ ๋๋ฆฌ๋ฅผ ์ด์ฉํด์ ์ฝ๋๋ฅผ ์งฐ๋๋ฐ ์์ง๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ด๊ธฐ์...
๋ค๋ฅธ๋ถ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ ๋ค์ ์ฝ๋๋ฅผ ์ง๋ดค๋๋ฐ...
<์ค๊ฐ์ฝ๋2>
import sys
d = {}
while True:
c = 0
n = int(sys.stdin.readline())
if n == 0:
break
else:
for i in range(n+1, 2*n+1):
if i in d:
if d[i] == True:
c += 1
else:
for j in range(2, int(i**0.5)+1):
if i % j == 0:
d[i] = False
break
else: #์ด ๋ถ๋ถ์ด ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ
c+= 1
d[i] = True
print(c)
์ฐธ๊ณ ํ ์ฝ๋ ์ถ์ฒ url: https://www.acmicpc.net/board/view/109405
๋ฌผ๋ก ํด๊ฒฐ์ ๋๋ค
์ด ๊ณผ์ ์ค์ for๋ฌธ๊ณผ ๊ฐ์ ๋ฐ๋ณต๋ฌธ๊ณผ else๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ ๋ ์๊ฒ ๋์๋ค
(๊ด๋ จ ์ฐธ๊ณ ๊ธ: https://wikidocs.net/190098#google_vignette)
ํ์ง๋ง ๋ด๊ฐ ์ง ์ฝ๋๋ฅผ ์ด์ฉํด์ ์ ๋ต์ ์ ์ถํ๊ณ ์ถ์ด์ ๋ฏธ๋ จ์ด ๋จ์๊ณ ...
๋ค์ ๋ณธ์๊ฐ ์ด๋ป๊ฒ ์ง๋ฉด ๋ ์ง ๊นจ๋ฌ์๋ฒ๋ ธ๋ค...!!
๋ฌธ์ ์ ์
1. ๋์ ๋๋ฆฌ๋ฅผ while๋ฌธ ์์ ๋ฃ์ด๋ฒ๋ ค์ ๋์ ๋๋ฆฌ๊ฐ ๋ฐ๋ณตํ ๋๋ง๋ค ์ด๊ธฐํ ๋จ
2. ์์๊ฐ ์๋ ์๋ฅผ ํ๋ณํ์๋ ๋์ ๋๋ฆฌ์ ๋ฃ์ง์์ ๋ค์๋ฅผ ๋์ ๋๋ฆฌ์์ ์ ์ธํ์ฌ ๋ฐ๋ณต์ ๊ณ์ฐํ๋ ์๊ฐ ๋ง์์ง
์ด๋ผ๊ณ ์๊ฐํ๋ค
๊ธ์ ์ฐ๋ฉด์ ๋ค์ ๊นจ๋ฌ์ ์ ์
์ด์ฐจํผ ๋์ ๋๋ฆฌ์์๋ True์ธ ์๋ง ์ฐพ๊ธฐ ๋๋ฌธ์
์์๊ฐ ์๋ ์๋ ๋์ ๋๋ฆฌ์ ๋ฃ์ด์ฃผ์ง ์๋ ๊ฒ์ด ๋ ๋น ๋ฅผ๊ฒ์ด๋ผ ์๊ฐ์ด ๋ค์๋ค
(๋์ ๋๋ฆฌ์์ ์์๋ฅผ ์ฐพ๋ ๋ถ๋ถ์์ if i in d ์ด๋ถ๋ถ๋ง์ด๋ค)
์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ ์ถํ๊ณ False๋ถ๋ถ๋ ๋นผ๊ณ ์ ์ถํด๋ดค๋๋ฐ ๋๋ค ์ ๋ต์ด์๊ณ
False๋ฅผ ๋์ ๋๋ฆฌ์ ๋ฃ์ง์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ๋ ์ฐํ์ง๋ง, ์๊ฐ์ ๋ ์ฐํ๋ค
๋์ ์ฐจ์ด๋ ๋์ ๋๋ฆฌ์ ํฌ๊ธฐ ์ฐจ์ด
1) ๋ง์ฝ False๊ฐ๋ ๋์ ๋๋ฆฌ์ ๋ฃ๋๋ค๋ฉด
=> True False ํ๋ณํ๋ ๋ถ๋ถ์์ ์ด๋ฏธ ์๋ ๊ฐ์ False์ผ์ง๋ผ๋ ํจ์๋ฅผ ๋ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๋๊ฑธ๋ฆฌ์ง๋ง
๋์ ๋๋ฆฌ์ ๊ฐ์ด ๋ฒ์๋ณ๋ก ๊ณ์ ์ปค์ง๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ๋จน์...
2) False๊ฐ์ ๋์ ๋๋ฆฌ์ ๋ฃ์ง ์๋๋ค๋ฉด
=> ๋์ ๋๋ฆฌ ํฌ๊ธฐ๊ฐ ์์์ง๊ธฐ์ ๋จน๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ ๊ฒ ๊ฐ๋ค... ๋์ ์์ ์ด์ธ์ ๊ฐ์ ๋ฌด์กฐ๊ฑด ํจ์๋ฅผ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์
์๊ฐ์ ๋ ๋๋ ๊ฒ...
๊ฒฐ๋ก ์
๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ์ ๋ฐ๋ผ ์ ์ ํ ์ ์ธ/์ฒจ๊ฐ ํ์ฌ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค
<์ต์ข ์ฝ๋>
import sys, math
def find_prime(m):
if m == 0 or m == 1:
return False
for i in range(2, int(math.sqrt(m)) + 1):
if m % i == 0:
return False
return True
d = {}
while True:
n = int(sys.stdin.readline())
c = 0
if n == 0:
break
else:
for i in range(n+1, 2*n+1):
if i in d:
if d[i] == True:
c += 1
else:
if find_prime(i):
d[i] = True
c += 1
else:
d[i] = False #์ด๋ถ๋ถ์ด ๋ฉ๋ชจ๋ฆฌ or ์๊ฐ์ ๊ฒฐ์ ํ๋ ๋ถ๋ถ
print(c)