-
๋ฐฑ์ค 4948๋ฒ python ํ์ด (with for-else)๐DEBUG/๐กPYTHON 2024. 5. 28. 19:00
๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ธฐ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๋น์ทํ ๋ฌธ์ ๋ค์ด ๋ฌถ์ฌ์๊ธฐ์
์ด์ ๋ฌธ์ ๋ค์ ํ๊ณ ๋์ ํด๋น ๋ฌธ์ ๋ ์ฝ๊ฒ ํ ์ ์์์ค ์์๋ค
ํ์ง๋ง ์๊ฐ์ด๊ณผ๊ฐ ์๊พธ ๋์ ์ง๋ฌธ๊ฒ์ํ์ ๋ค์ ธ๋ดค๋ค
<์ด๊ธฐ์ฝ๋>
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)
'๐DEBUG > ๐กPYTHON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2485๋ฒ python ํ์ด (0) 2024.05.23 ๋ฐฑ์ค 18870๋ฒ python ํ์ด (0) 2024.05.21 ๋ฐฑ์ค 2231๋ฒ python ํ์ด (2) 2024.05.14 ๋ฐฑ์ค 2798๋ฒ python ํ์ด (0) 2024.05.09 ๋ฐฑ์ค 3009๋ฒ python ํ์ด (0) 2024.05.09