220v
젝무의 개발새발
220v
전체 방문자
오늘
어제
  • 분류 전체보기 (255)
    • AI (35)
      • ML, DL 학습 (30)
      • 논문 리뷰 (4)
      • 실습 및 프로젝트 (1)
    • Algorithm (145)
      • LeetCode (13)
      • 프로그래머스 (35)
      • 백준 (96)
      • 알고리즘, 문법 정리 (1)
    • Mobile, Application (17)
      • Flutter (10)
      • iOS, MacOS (7)
    • BackEnd (7)
      • Flask (1)
      • Node.js (5)
      • Spring, JSP..etc (1)
    • Web - FrontEnd (18)
      • JavaScript, JQuery, HTML, C.. (12)
      • React (6)
    • DataBase (1)
      • MySQL (1)
      • Firebase Firestore (0)
      • Supabase (0)
    • Git (1)
    • 기타 툴 및 오류 해결 (3)
    • 강의 (5)
      • Database (3)
      • 암호학 (2)
      • 알고리즘 (0)
    • 후기와 회고 (2)
    • 블로그 꾸미기 (1)
    • 일상과 이것저것 (20)
      • 맛집 (12)
      • 세상사는일 (4)
      • 도서리뷰 (1)
      • 이런저런 생각들 (잡글) (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dfs
  • top-down
  • implementation
  • 위상 정렬
  • 프로그래머스
  • two pointer
  • binary search
  • Lis
  • Greedy
  • Mathematics
  • BFS
  • 오블완
  • Prefix Sum
  • Dynamic Programming
  • REACT
  • union-find
  • 구현
  • IMPLEMENT
  • dp
  • topological sort
  • 다익스트라
  • disjoint set
  • Minimum Spanning Tree
  • 백준
  • simulation
  • bitmasking
  • brute-Force
  • 티스토리챌린지
  • Backtracking
  • Priority Queue

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
220v

젝무의 개발새발

Algorithm/백준

[백준] 2166. 다각형의 면적 - 파이썬

2023. 4. 3. 00:38

https://www.acmicpc.net/problem/2166

 

2166번: 다각형의 면적

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.

www.acmicpc.net

 

풀이

vector의 외적(Cross Product)을 통한 삼각형의 넓이를 구하는 방법을 이용해 풀었다.

첫 번째 입력되는 점을 기준으로 잡고,

[dot1, dot2, dot3 triangle] => (dot2-dot1) vector, (dot3-dot1) vector's cross product

[dot1, dot3, dot4 triangle] => (dot3-dot1) vector, (dot4-dot1) vector's cross product

...

 

와 같이 계산 후, 모든 삼각형의 면적값을 더한 뒤, 마지막에 절댓값 계산만 넣어주면 된다.

외적을 이용한 계산이기 때문에, 오목점이 있는 다각형이라도, 자동으로 전체 면적에서 마이너스 된다.

 

N = int(input())

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

area = 0

'''triangle: 1st dot, and ith, (i+1)th dot.'''
for i in range(1, len(dots)-1):
    a = dots[0]
    b = dots[i]
    c = dots[i+1]

    '''vector 1 : (x2-x1, y2-y1)'''
    vec1 = [b[0]-a[0], b[1]-a[1]]
    '''vector 2 : (x3-x2, y3-y1)'''
    vec2 = [c[0]-a[0], c[1]-a[1]]

    '''add triangle's area to total area'''
    area += (vec1[0]*vec2[1] - vec1[1]*vec2[0])/2

print(abs(area))

 

    'Algorithm/백준' 카테고리의 다른 글
    • [백준] 1806. 부분합 - 파이썬
    • [백준] 1202. 보석 도둑 - 파이썬
    • [백준] 1005. ACM Craft - 파이썬
    • [백준] 1197. 최소 스패닝 트리 - 파이썬
    220v
    220v
    DGU CSE 20 / Apple Developer Academy @ POSTECH 2nd Jr.Learner.

    티스토리툴바