목록전체 글 (281)
내 잡다한 노트
# 가변 인수 용도 ) 매개변수가 여럿인 함수를 짤 때 사용, 매개변수가 몇개가 필요한지 모를때 def funtion(*args): print(args) *를 붙이면 args라는 이름의 튜플이 되고 iterable해서 반복문도 사용할 수 있다. 고정인수와 가변인수를 함께 사용할 땐, 고정 매개변수를 먼저 지정해야한다. # 언패킹 인수를 순서대로 넣을 때 리스트나 튜플을 사용하는 방법 x = [10 ,20, 30] def print_numbers(a, b, c) 로 만들어짐. print_numbers(*x) 를 하면 x의 요소들이 순서대로 함수에 들어가게 된다. 이때, 함수의 매개변수 개수와 리스트의 요소 개수는 같아야 한다. 딕셔너리를 언패킹할때는 ** 으로 써야한다. 이때, 함수의 매개변수 이름과 딕셔..
포인터 2) 포인터 변수가 가리키고 있는 변수를 참조하려면 * 를 사용한다. 즉, int *ex = NULL; int data = 100; ex = &data; printf("%d", *ex); 포인터 변수는 간단한 더하기와 뺄셈 연산으로 이웃한 변수의 주소 연산을 수행할 수 있다. 처음 int *pi에 100이라는 주소값이 저장돼있다고 하면 *(pi+1)을 하면 int의 크기가 4이니까 주소값이 104로 연산돼 저장이 된다. 만약 double 포인터 변수로 선언돼있다면 +1을 할 때 주소값은 +8이 되는 것이다. 포인터 변수는 동일한 자료형끼리만 대입이 가능하다. 이중포인터) 포인터 변수의 주소값을 갖는 변수를 이중 포인터라 한다. 즉, 포인터의 포인터인 셈이다. int i = 20; int *pi =..
하나의 정점에서 다른 모든 정점으로 가는 최단 경로를 알려준다. 이때 음의 간선을 포함할 수 없다. 그래서 모든 정점까지 최단 경로로 방문하며 각 정점까지의 최단 경로를 모두 찾을 수 있다. 구현할 때 dp를 활용할 수 있다. dijkstra가 dp문제인 이유는 '최단 거리는 여러 개의 최단 거리로 이루어져 있기 때문이다.' 기본적으로 하나의 최단 거리를 구할 때 그 이전까지 구했던 최단 거리 정보를 그대로 사용한다. # 구체적인 작동 과정)) 1. 출발 노드를 설정한다. 2. 출발 노드를 기준으로 각 노드의 최소 비용을 저장한다. 3. 방문하지 않은 노드 중에서 가장 비용이 적은 노드를 선택한다. 4. 해당 노드를 거쳐서 특정한 노드로 가는 경우를 고려해 최소 비용을 갱신 5. 3번~4번을 반복한다. ..
* 그래프에서 정점끼리의 최단 경로를 구하는 방법 1. 하나의 정점에서 다른 하나의 정점까지의 최단경로를 구하는 문제 start가 하나, arrival point가 하나 2. 하나의 정점에서 다른 모든 정점까지의 최단 경로를 구하는 문제 start가 하나, arrival point가 여러개 3. 하나의 목적지로 가는 모든 최단 경로를 구하는 문제 start가 여러개, arrival point가 하나 4. 모든 최단 경로를 구하는 문제 start가 여러개, arrival point가 여러개 플로이드 와샬은 마지막에 해당하는 모든 최단 경로를 구하는 방법이다. 다익스트라와 벨만포드는 두 번째에 해당.
문제) https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 감각을 찾기위해 오랜만에 알고리즘을 풀었지만 접근도 잘못했다. 숨바꼭질같은 문제를 dfs로 푼 기억이 있어 dfs로 풀려했지만 풀리지 않아 다른 분들의 풀이를 보니 이 문제에서 가중치가 다르다는 걸 인지를 못하고 있었다. 나의 잘못된 풀이) import math import sys ans = math.inf visited = [] n, k = map(int..
위 두가지는 Layer 4: 전송계층에서 사용되는 프로토콜이다. 전송(Transport)계층은 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층. 그래서 transport구나... IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당한다. TCP(Transmission Control Protocol) TCP는 신뢰성 있는 데이터 전송을 지원하는 연결형 프로토콜이다. 일반적으로 TCP와 IP가 함께 사용되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 하게 된다. 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작함. 데이터의 전송 순서를 보장하고 UDP보다 전송속도가 느리다. UDP(User Datagram Protoc..
# 정의 데이터를 주고보낼 때, 전송되는 특정한 형식을 갖춘 데이터 조각. # 왜 패킷이 사용되는가? 데이터를 한 번에 통으로 보내면 편할 것 같지만 문제가 있다. 큰 데이터는 대역폭을 너무 많이 차지하기 때문. 그렇게 돼면 트래픽이 많아진다. 그래서 작은 단위인 패킷으로 잘라 전송한다. 데이터를 목적을 가진 조각들로 쪼개놓은것. # 구성 헤더와 페이로드로 구성된다. 헤더에는 출발지, 목적지 IP주소와 같은 패킷에 대한 정보가 포함되고 페이로드에는 실제 데이터가 들어간다. # 패킷 교환 # 패킷 헤더
프로그램이 네트워크에서 데이터를 주고받을 수 있도록 두 프로그램 간 양방향 통신의 하나의 엔드 포인트(?)이다. 소켓은 포트 번호에 바인딩되어 TCP 레이어에서 데이터가 전달되야하는 애플리케이션을 식별할 수 있게 한다. 소켓은 소프트웨어와 소프트웨어를 연결한다. 바로 IP와 포트를 통해서 한다. 엔드 포인트의 정의 )) 아이피 주소와 포트 번호의 조합을 의미한다. 프로세스 간 통신에 사용되는 Socket을 이용한 통신 프로그래밍을 socket Programming이라고 한다. Client Socket과 Server Socket로 구분된다. ## 클라이언트에서 하는 일 - 소켓 생성, 연결 요청(IP주소와 포트 번호로 연결하고 싶은 타겟대상을 특정), 데이터 송수신(수신하는 API는 별도의 Thread에서..