본문 바로가기
728x90
반응형

전체 글314

[Algorithm][백준 11758][파이썬] CCW 알고리즘을 활용하여 선분의 교차 여부 판단 어떠한 세 점 A, B, C가 다음과 같이 존재한다고 하자. 선분 AB에 대하여 점 C가 왼쪽에 있는지 오른쪽에 있는지 어떻게 판별할 수 있을까? 여러가지 방법이 존재하겠지만 외적을 사용하면 쉽게 구할 수 있다. 우선 외적의 정의부터 보자. 벡터 u와 벡터 v의 외적을 구하는 공식은 아래와 같다. sin 값은 180도를 기준으로 부호가 바뀐다. 0~180도 전까지는 양수, 180도는 0, 180~360도 전까지는 음수이다. 위의 점 A, B, C도 이를 이용해보자. 먼저 선분 AB, AC를 만들어본다. 벡터 AB와 벡터 AC의 외적 값이 양수라면 C는 선분 AB의 오른쪽에 존재하는 것이고 음수라면 왼쪽에 존재하는 것이다. 다음 그림은 C가 선분 AB의 왼쪽에 있을 때이다. 각도가 180도 넘어가기 때문에.. 2023. 4. 24.
[Algorithm] 펜윅 트리, 이진 인덱스 트리, BIT(Binary Indexed Tree)로 구간 합 문제 해결 어떤 배열의 특정 범위에 해당하는 수의 합을 구할 때 부분 합을 사용한다. 이 부분 합의 전처리 과정의 시간 복잡도는 O(N)이고 원하는 값을 구할 때의 시간 복잡도는 O(1)이다. 전처리 과정 sum[ i ]의 값을 arr의 인덱스 0부터 인덱스 i 까지의 합이라고 정의하고 아래와 같은 배열이 있다고 하자. sum[0]은 1일 것이고 sum[1]은 9일 것이고 sum[2]는 12일 것이다. 이를 구하는 과정을 파이썬을 나타내면 다음과 같고 시간 복잡도는 O(N)이다. arr=[1, 8, 3, 4, 6, 7, 4, 4] sum=[0 for _ in range(8)] sum[0]=arr[0] for i in range(1, 8): sum[i]=sum[i-1]+arr[i] 원하는 값 구하기 그런데 위 sum.. 2023. 4. 23.
[Network] RDT (Reliable Data Transfer protocol) https://growth-coder.tistory.com/154 이전 포스팅에서 TCP가 reliable한 이유에 대해서 알아보았다. 이번 포스팅에는 정확히 어떤 방식으로 TCP가 reliable한지 RDT의 버전을 기준으로 공부해보려고 한다. FSM(Finite State Machine)을 사용할 예정이므로 간단하게 알고가면 좋다. 아래 그림에서 보다싶이 위에는 발생한 이벤트, 아래는 이벤트가 발생하면 진행할 액션이다. 그리고 점선 화살표가 나올텐데 이는 가장 처음 상태라는 의미이다. RDT 1.0 sender sender부터 보면 sender의 첫 상태는 application 계층으로부터 call을 기다리는 상태이다. 기다리는 상태에서 application 계층에서 rdt_send를 호출하면 tra.. 2023. 4. 22.
[Spring][WebSocket] 스프링 STOMP와 웹 소켓 개념 및 사용법 (Web Socket with STOMP) (1) 클라이언트와 서버가 통신할 때 HTTP 통신을 주로 사용한다. HTTP 통신은 다음과 같은 특징이 있다. 비연결성 (connectionless) : 연결을 맺고 요청을 하고 응답을 받으면 연결을 끊어버린다. 무상태성 (stateless) : 서버가 클라이언트의 상태를 가지고 있지 않는다. 단방향 통신이다. 이러한 HTTP 통신의 경우 채팅과 같은 실시간 통신에 적합하지 않다. 물론 HTTP 통신으로 실시간 통신을 흉내낼 수는 있으나 완벽하지는 않다. 실시간 통신이 필요할 때 사용하는 통신을 소켓 통신이라고 한다. HTTP 통신과 다르게 연결을 맺고 바로 끊어버리는 게 아니라 계속 유지를 하기 때문에 실시간 통신에 적합하다. 이제 스프링에서 간단하게 웹 소켓으로 통신을 해보려고 한다. 구현에 앞서 STOM.. 2023. 4. 20.
728x90
반응형