๐Ÿ˜–DEBUG/๐ŸŸกPYTHON

๋ฐฑ์ค€ 4948๋ฒˆ python ํ’€์ด (with for-else)

soo0s 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)