๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ Algorithm/๊ตฌํ˜„

[LeetCode] 1828๋ฒˆ: ์› ์•ˆ์˜ ์  ๊ฐœ์ˆ˜

by HelloRabbit 2023. 4. 28.
728x90

Hint

1. ์›๊ณผ ์ ๋“ค์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ๊ฐ 500๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— for๋ฌธ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ผ์ผ์ด ๋น„๊ตํ•ด๋„ ๋œ๋‹ค
2. Follow up์— O(n)์œผ๋กœ ํ’€์–ด๋ณด๋ผ๊ณ  ๋˜์–ด์žˆ์ง€๋งŒ ์ด๊ฑด ๋‚˜์ค‘์— ๋„์ „...^^

 

LeetCode 1828๋ฒˆ: Queries on Number of Points Inside a Circle (ํ’€์–ด๋ณด๊ธฐ)

class Solution:
    def countPoints(self, points: List[List[int]], queries: List[List[int]]) -> List[int]:
        # points๋ฅผ x, y ์ˆœ์„œ๋กœ ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ํฐ ์ˆซ์ž๊นŒ์ง€ ์ •๋ ฌํ•œ๋‹ค
        points = sorted(points, key=lambda x: (x[0],x[1]))
        
        answer = []
        for query in queries:
            x, y, r = query
            count = 0
            
            for point in points:
                px, py = point
                
                # points๋ฅผ ์ •๋ ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์›์˜ ์ตœ๋Œ€ x, y๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ์  ์ดํ›„๋กœ๋Š” ํ™•์ธ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค
                if (px >= x + r) & (py >= y + r):
                    break
                
                # ์› ์ค‘์‹ฌ์—์„œ point๊นŒ์ง€์˜ ๊ธธ์ด๊ฐ€ ๋ฐ˜์ง€๋ฆ„๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์„ ๋•Œ๋งŒ ์› ์•ˆ์— ์žˆ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ˆ˜์— ํฌํ•จํ•œ๋‹ค
                if r >= ((px-x)**2 + (py-y)**2)**0.5:
                    count += 1
            
            answer.append(count)
        
        return answer

 

 

 

 

๋Œ“๊ธ€