DevYoon

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์  ์ฐ๊ธฐ (Python) ๋ณธ๋ฌธ

PS/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์  ์ฐ๊ธฐ (Python)

gimewn 2023. 2. 7. 22:34

link ๐Ÿ”— https://school.programmers.co.kr/learn/courses/30/lessons/140107

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

์ขŒํ‘œํ‰๋ฉด์„ ์ข‹์•„ํ•˜๋Š” ์ง„์ˆ˜๋Š” x์ถ•๊ณผ y์ถ•์ด ์ง๊ตํ•˜๋Š” 2์ฐจ์› ์ขŒํ‘œํ‰๋ฉด์— ์ ์„ ์ฐ์œผ๋ฉด์„œ ๋†€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง„์ˆ˜๋Š” ๋‘ ์–‘์˜ ์ •์ˆ˜ k, d๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์„ ์ฐ์œผ๋ ค ํ•ฉ๋‹ˆ๋‹ค.

  • ์›์ (0, 0)์œผ๋กœ๋ถ€ํ„ฐ x์ถ• ๋ฐฉํ–ฅ์œผ๋กœ a*k(a = 0, 1, 2, 3 ...), y์ถ• ๋ฐฉํ–ฅ์œผ๋กœ b*k(b = 0, 1, 2, 3 ...)๋งŒํผ ๋–จ์–ด์ง„ ์œ„์น˜์— ์ ์„ ์ฐ์Šต๋‹ˆ๋‹ค.
  • ์›์ ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ€ d๋ฅผ ๋„˜๋Š” ์œ„์น˜์—๋Š” ์ ์„ ์ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, k๊ฐ€ 2, d๊ฐ€ 4์ธ ๊ฒฝ์šฐ์—๋Š” (0, 0), (0, 2), (0, 4), (2, 0), (2, 2), (4, 0) ์œ„์น˜์— ์ ์„ ์ฐ์–ด ์ด 6๊ฐœ์˜ ์ ์„ ์ฐ์Šต๋‹ˆ๋‹ค.

์ •์ˆ˜ k์™€ ์›์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ d๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ ์ด ์ด ๋ช‡ ๊ฐœ ์ฐํžˆ๋Š”์ง€ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • 1 ≤ k ≤ 1,000,000
  • 1 ≤ d ≤ 1,000,000

 


 

์‹œ๊ฐ„์ดˆ๊ณผ ๋‚ฌ๋˜ ์ฝ”๋“œ

from itertools import product

def solution(k, d):
    answer = 0
    lst = [k*idx for idx in range(d//k+1)]
    limit = d**2
    
    for pro in list(product(lst, repeat=2)):
        if pro[0]**2+pro[1]**2 <= limit:
            answer += 1
            
    return answer

 

์ •๋‹ต ์ฝ”๋“œ

import math

def solution(k, d):
    answer = 0
    
    # a์˜ ๋ฒ”์œ„๋Š” 0๋ถ€ํ„ฐ d๊นŒ์ง€, k์”ฉ ๊ฑด๋„ˆ๋›ด๋‹ค.
    for a in range(0, d+1, k):
        # a**2 + b**2 <= d**2
        # b**2 <= d**2 - a**2
        limit = math.sqrt(d**2 - a**2)
        # answer += b์˜ ๊ฐœ์ˆ˜๋Š” limit์„ k๋กœ ๋‚˜๋ˆˆ ๋ชซ(k์”ฉ ๊ฑด๋„ˆ๋›ฐ๋ฏ€๋กœ) + 1
        answer += limit // k +1
    
    return answer

 

โœ๏ธ ์ฒ˜์Œ์— ์›์ (0, 0)๊ณผ (a, b) ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ (a-0) + (b-0)์œผ๋กœ ์ƒ๊ฐํ–ˆ์—ˆ์œผ๋‚˜, ๋‹ต์ด ์•„๋‹ˆ์—ˆ๋‹ค. ์›์ ๊ณผ (a,b) ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” ๋‘˜์„ ์—ฐ๊ฒฐํ•œ ์„ ์˜ ๊ธธ์ด๋กœ, ์‚ผ๊ฐํ˜•์˜ ๋น—๋ณ€์ด๋‹ค.

โœ๏ธ ์ฒ˜์Œ ํ’€์ดํ•œ ๋ฐฉ์‹์€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์ˆœ์—ด์„ ๊ตฌํ•ด์„œ, ์›์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ d ์ดํ•˜์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด answer์— 1์”ฉ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

โœ๏ธ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด a๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค. a**2+b**2 <= d**2 ์—ฌ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ, a๊ฐ€ ๊ตฌํ•ด์ง„๋‹ค๋ฉด b์˜ ์ตœ๋Œ€์น˜๋Š” d**2-a**2์˜ ์ œ๊ณฑ๊ทผ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ ์ตœ๋Œ€์น˜๋ฅผ k๋กœ ๋‚˜๋ˆˆ ๋ชซ์— 1์„ ๋”ํ•ด์ฃผ๋ฉด ๋‹ต์ด ๋‚˜์˜จ๋‹ค!