목록전체 글 (102)
영호
문제 링크 https://www.acmicpc.net/problem/9465 나의 풀이 우선, 3xn 크기의 dp테이블과 2xn 크기의 stickers배열을 생성합니다. dp[0][n] stickers[0][n]의 스티커를 뜯었을 때의 최댓값을 저장하고, 두 번째 행도 이와 마찬가지입니다. dp[2][n]은 stickers[0][n], stickers[1][n] 모두 뜯지 않았을 때의 최댓값을 저장합니다. 스티커를 뜯는 방식으로 3가지를 고려할 수 있습니다. 0행의 n열 스티커를 뜯는 경우 -> stickers[0][n]을 뜯는 경우 stickers[0][n]을 뜯은 경우 이와 인접한 stickers[0][n-1] 스티커는 뜯을 수 없기 때문에, stickers[0][n-1] 스티커를 뜯지 않은 경우인..
TCP란 Transport layer의 프로토콜 중 하나로 연결 지향적인 프로토콜입니다. 패킷 손실 복구, 패킷 순서 보장, 흐름 제어, 혼잡 제어 등의 기능을 제공합니다. 두 개의 host 간 connection이 설정되면 양방향 소통이 가능합니다. handshaking 과정을 통해 연결 초기 설정을 합니다. receiver의 상태에 따라 패킷 전송속도를 조절합니다. TCP헤더는 기본 20byte이고, 옵션 추가에 따라 60byte까지 늘어날 수 있습니다. 헤더의 Sequence number, Acknowledgement number필드를 통해 reliable data transfer가 가능합니다. 헤더의 Window size필드를 통해 receiver의 상태를 파악해 데이터 전송 속도를 조절합니다. ..
Transport layer의 역할 Transport layer는 OSI 7 계층 중 4계층에 속하고 Network layer의 바로 위에 존재하는 계층입니다. Transport layer는 다른 host에서 동작하고 있는 process사이의 논리적인 커뮤니케이션을 담당합니다. 논리적인 커뮤니케이션은 데이터를 주고받는 과정에서 데이터의 오류 검증, 순서 보장 등의 역할을 의미합니다. network core에 존재하는 router등과 같은 host에는 구현되어 있지 않고, end-system에만 구현하면 됩니다. 대표적으로 TCP, UDP 프로토콜을 제공합니다. 위 사진과 같이 process 간의 논리적 커뮤니케이션을 담당하기 때문에 헤더에 source port, destination port정보가 붙습니..
DNS란 google페이지에 접속을 할 때 저희는 google server의 IP주소로 접근하는 것이 아닌 www.google.com을 이용해 구글 페이지를 받을 수 있습니다. 이처럼 사람들은 각 서비스 server의 IP주소를 외우고 있을 수 없기 때문에 외우기 쉬운 도메인 이름을 통해 접속을 하는데, 이를 가능하게 해주는 것이 DNS(Domain Name System)입니다. Application layer의 프로토콜 중 하나입니다. DNS의 구조 IP주소가 너무 많기 때문에 이를 전부 하나의 서버에서 관리하게 되면 너무 많은 부담이 생기기 때문에, 계층 구조로 분산해서 관리합니다. DNS는 RootNameServer, TLD, Authoritative DNS server를 통해 계층 구조를 이루고 ..
문제 링크 https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 나의 풀이 x번 카드와 y번 카드를 골라 그 두 장에 쓰인 수를 더한 값을 계산한다. (x ≠ y) 저는 처음에 x!= y의 뜻이 x, y가 같은 수면 안된다는 뜻인 줄 알았는데, 그게 아니라 같은 위치의 카드를 고를 수 없다는 뜻입니다. heapq를 사용하여 풀이했습니다. Code import heapq cards_num, m = map(int,i..
문제 링크 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 나의 풀이 최단거리를 구하기 위해 bfs를 사용했습니다. 최대 입력이 100,000까지라 maps를 100,001 크기로 설정했습니다. bfs알고리즘을 수행하며 x+1, x-1, x*2로 탐색을 했습니다. 인덱스 에러 방지 및 방문한 지점에 대해서 예외처리를 진행합니다. deque.leftpop()에서 목표 지점과 동일한 값이 나오면 bfs()를 종료합니다...
문제 링크 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 나의 풀이 이 문제는 구글링을 통해 풀이 방법을 참조했습니다. 각 알파벳들이 단어의 어느 자릿수에 위치하는지 확인하고 이를 딕셔너리에 저장합니다. ex) 'ADC'이면 A는 100, D는 10, C는 1을 딕셔너리에 'A' = 100, 'D' = 10, 'C' = 1로 저장하고, 다른 단어들에 대해서도 똑같이 각 자릿수를 딕셔너리에 더해줍니다. 알파벳들이 어느 자릿수에 위치하는지..
HashMap이란 Java의 collections 중 Map인터페이스를 구현한 클래스 중 하나입니다. 파이썬의 딕셔너리처럼 "Key : Value"형태로 이루어져 있습니다. 이미 존재하는 Key에 새로운 값을 넣을 경우 기존 값은 새로운 값으로 대체됩니다. Key는 중복될 수 없습니다. Map hashMap = new HashMap(); hashMap.put("test", 1); hashMap.put("test", 2); System.out.println("hashMap = " + hashMap); // hashMap = {test=2} 멀티 스레드 환경에서는 ConcurrentHashMap을 사용해야 합니다. 해시 함수를 이용해 값을 저장하고 찾기 때문에 데이터 검색에서 속도가 빠른 장점이 있습니다. ..