ps:problems:boj:6384
Area
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 6384 |
문제명 | Area |
레벨 | 골드 3 |
분류 |
기하학 |
시간복잡도 | O(T*m*logd) |
인풋사이즈 | T<=?, m<=100, d<=100 |
사용한 언어 | Python 3.11 |
제출기록 | 33376KB / 52ms |
최고기록 | 44ms |
해결날짜 | 2023/04/17 |
풀이
- 원래 teflib.geometry.lattice_point_in_polygon 내부에서 넓이를 이미 계산하기는 하지만, 외부로 그 값을 리턴해주지 않기 때문에, 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/problems/boj/6384.txt · 마지막으로 수정됨: 2023/04/17 06:12 저자 teferi
토론