====== Area ====== ===== 풀이 ===== * 문제는 마치 [[ps:이론:기하학#픽의 정리]]를 이용해서 넓이 구해야 한다는 것처럼 적혀있는데, 그냥 [[ps:이론:기하학#다각형의 넓이]] 공식으로 넓이를 구하고, [[ps:이론:기하학#픽의 정리]]로 격자점의 갯수를 세어주면 끝이다. * 원래 [[:ps:teflib:geometry#lattice_point_in_polygon|teflib.geometry.lattice_point_in_polygon]] 내부에서 넓이를 이미 계산하기는 하지만, 외부로 그 값을 리턴해주지 않기 때문에, [[:ps:teflib:geometry#twice_of_polygon_area|teflib.geometry.twice_of_polygon_area]]를 따로 한번 더 호출해서 넓이를 구하도록 했다. 다소 비효율적이지만 문제 범위가 작아서, 속도에는 별 차이 안난다. ===== 코드 ===== """Solution code for "BOJ 6384. Area". - Problem link: https://www.acmicpc.net/problem/6384 - Solution link: http://www.teferi.net/ps/problems/boj/6384 Tags: [Pick's theorem] """ import sys from teflib import geometry def main(): scenario_count = int(sys.stdin.readline()) for scenario_no in range(1, scenario_count + 1): m = int(sys.stdin.readline()) dx_and_dy = [ [int(x) for x in sys.stdin.readline().split()] for _ in range(m) ] px, py = 0, 0 polygon = [(px := px + dx, py := py + dy) for dx, dy in dx_and_dy] interior, boundary = geometry.lattice_point_in_polygon(polygon) twice_area = geometry.twice_of_polygon_area(polygon) print(f'Scenario #{scenario_no}:') print(interior, boundary, twice_area / 2) print() if __name__ == '__main__': main() * Dependency: * [[:ps:teflib:geometry#lattice_point_in_polygon|teflib.geometry.lattice_point_in_polygon]] * [[:ps:teflib:geometry#twice_of_polygon_area|teflib.geometry.twice_of_polygon_area]] {{tag>BOJ ps:problems:boj:골드_3}}