Post

[BOJ] 공격 - 1430 (G4)

[BOJ] 공격 - 1430 (G4)
시간 제한메모리 제한
2 초128 MB

문제

기지에서 출발하여 반경 R 이내에 있는 모든 타워를 공격한다. 타워를 공격하면 그 타워로부터 다시 반경 R 이내의 다른 타워를 공격할 수 있다. 각 단계마다 공격력은 반감된다.

최대 공격력을 구하는 프로그램을 작성하시오.

풀이

BFS를 사용하여 거리 내의 타워를 탐색하고, 각 단계마다 공격력을 반감시킨다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import sys
from collections import deque
input = sys.stdin.readline

def distance(x1, y1, x2, y2, r_squared):
    dist_sq = (x2 - x1) ** 2 + (y2 - y1) ** 2
    return dist_sq <= r_squared

def solve():

    N, R, D, X, Y = map(int, input().split())

    graph = [[0, 0]]
    for _ in range(N):
        graph.append(list(map(float, input().split())))

    v = [False] * (N + 1)
    
    q = deque([(X, Y, 0)])
    
    result = 0.0
    
    r_sq = R * R

    while q:
        cur_x, cur_y, count = q.popleft()

        for i in range(1, N + 1):
            target_x, target_y = graph[i]

            if not v[i] and distance(cur_x, cur_y, target_x, target_y, r_sq):
                v[i] = True

                result += (D / (2 ** count))
                
                q.append((target_x, target_y, count + 1))

    print(result)
solve()

시간 복잡도

O(N^2)

This post is licensed under CC BY 4.0 by the author.