전체 글 481

[네트워크] TCP와 UDP의 차이

TCP와 UDP는 OSI 7 계층의 전송 계층에서 사용되는 프로토콜이다. TCP와 UDP는 데이터를 전달하는데 사용되지만 정확성을 추구하는 TCP와 신속성을 추구하는 UDP는 각각 방식이 다르다. 이번에 TCP와 UDP의 차이를 알아보고 UDP가 어디에 사용되는지 알아보자. TCP TCP는 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 연결 지향적 프로토콜이다. 연결을 위해서 3-way handshake를 사용하며 클라이언트가 연결 요청을 하면 서버는 연결을 수락한다. 서버가 연결을 수락했다면 고정적인 통신 선로가 생기고 이를 통해 데이터를 주고받을 수 있다. 이를 통해 TCP는 1:1 통신만 가능하다는 것을 알 수 있다. TCP는 신뢰성있는 데이터 전송을 하기 때문에 클라이언트가 전송하는 모든 ..

CS/네트워크 2021.09.30

[운영체제] 인터럽트가 무엇일까?

인터럽트는 끼어들기라고 생각하면 쉽게 이해할 수 있다. 이미 진행하고 있는 일을 중간에 끼어들어 가로채서 다른 사람이 그 일을 진행하는 것이라고 일단 생각해보자. 그리고 인터럽트의 정의와 종류, 처리 과정을 알아보면서 이해해보자. 개념 CPU는 매번 프로그램 카운터가 가리키는 곳의 명령을 수행한 후에 다음 명령을 수행하기 직전에 인터럽트 라인을 확인한다. 이때 인터럽트 라인에 인터럽트가 발생했을 때는 지금까지 수행하던 일을 PCB에 저장하고 인터럽트를 수행한다. 만약 인터럽트를 처리하는 중에 또 다른 인터럽트가 들어온다면 어떻게 할까? 결론적으로 인터럽트 처리 중에 다른 인터럽트를 허용하지 않는다. 왜냐하면 A라는 인터럽트가 어떤 데이터를 변경을 하고 있는데 B라는 인터럽트가 들어왔다고 가정해보자. B라..

CS/운영체제 2021.09.29

[알고리즘] 슬라이딩 윈도우

슬라이딩 윈도우는 어떠한 배열에서 일정 범위의 값을 비교할 때 유용하게 사용될 수 있는 방법이다. 투 포인터와 비슷하다고 생각할 수 있지만 투 포인터는 정렬된 배열 내에서 가변적인 범위를 탐색하는 반면 슬라이딩 윈도우는 정렬의 유무와 상관없이 고정적인 범위를 탐색한다는 것에 차이가 있다. 개념 슬라이딩 윈도우는 어떠한 배열에서 고정된 크기의 범위를 탐색할 때 유용하게 사용된다. 아래의 그림과 같은 배열을 예시로 확인해보자. 아래의 배열 중에서 연속된 세개의 수를 선택하여 그 합이 최대가 되는 구간이 어디인지 구하려고 한다. 이를 위해 아래의 그림처럼 처음부터 세개의 수를 선택하여 합을 구할 수 있을 것이다. 순서대로 (3 - 1 + 8)을 계산하고 (-1 + 8 - 2)를 계산하면서 진행하는데 (-1 +..

CS/알고리즘 2021.09.28

[자료구조] 중위, 후위 순회를 이용한 전위순회 구하기

중위 순회와 후위 순회의 결과를 알 때 전위 순회의 결과를 구해보려고 한다. 이는 백준 2263 트리의 순회 문제이다. 해당 문제는 트리 순회의 특징을 정확히 이해하고 있는지 판단하기 좋은 문제라고 생각한다. 이와 비슷하게 전위 순회와 중위 순회를 알 때 후위 순회를 구할 수 있지만 전위 순회와 후위 순회를 알 때 중위 순회는 구할 수 없다. 접근 아래와 같은 트리가 있다고 해보자. 이 트리를 중위 순회, 후위 순회로 탐색하면 다음과 같은 순서일 것이다. 중위 순회 : 4 -> 2 -> 5 -> 1 -> 3 -> 6 후위 순회 : 4 -> 5 -> 2 -> 6 -> 3 -> 1 후위 순회는 루트 노드를 가장 마지막에 방문하기 때문에 후위 순회 결과 중 가장 마지막 노드인 1이 루트 노드라는 것을 확인할 ..

CS/자료구조 2021.09.28

[SWEA 2105] 디저트 카페

접근 사각형을 그리기위해 시작 위치를 기준으로 (1, -1), (1, 1), (-1, 1), (-1, -1)로 순서대로 이동하도록 구현하였다. DFS로 탐색을 진행하고 범위를 벗어나거나 이미 방문한 카페라면 return을 하고 그렇지 않을 때는 현재 방향을 그대로 이동하거나 방향을 증가시켜 이동한다. 방향을 증가시켜 이동할 때는 (-1, 1)로 이동하다가 (1, 1) 방향에 목적지가 있을 때 방향을 바꾼다. 또한 (1, -1)이거나 (1, 1)일 때는 현재 방향으로도 이동하고 다음 방향으로도 이동할 수 있도록 재귀호출한다. 구현 - 주어진 입력을 모두 받은 후에 - board를 탐색하면서 각 위치에서 dfs를 진행한다. N = int(input()) board = [list(map(int, input()..

[JS] Webpack을 사용하는 이유

Webpack이 무엇인지 알아보기 전에 Webpack을 사용하는 이유가 궁금했다. 먼저 Webpack을 왜 사용하는지 이해하고 Webpack의 개념과 활용법을 정리해보려고 한다. Webpack의 등장 배경 대부분의 기술들은 기존의 문제들을 해결하기 위해 발전하거나 새롭게 탄생한다. Webpack도 기존의 문제들을 해결하기 위해 개발되었다. 따라서 Webpack의 등장 배경을 알아본 후에 Webpack이 무엇인지 이해할 필요가 있다. 기존의 문제점은 다음 4가지이다. 자바스크립트 변수 유효 범위 브라우저별 HTTP 요청 횟수의 제한 사용하지 않는 코드의 관리 Dynamic Loading & Lazy Loading 미지원 위의 4개의 문제 형태와 Webpack으로 어떻게 해결할 수 있는지 알아봅시다. 자바스..

[Level 2] 행렬의 곱셈

https://programmers.co.kr/learn/courses/30/lessons/12949 코딩테스트 연습 - 행렬의 곱셈 [[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]] programmers.co.kr 접근 행렬을 곱하기 위해서는 행렬 A와 B가 있을 때 행렬 A의 열 개수와 행렬 B의 행 개수가 같아야 한다. 그리고 행렬의 곱을 그대로 코드로 구현하였다. 구현 - arr2의 행과 열의 개수를 N과 M에 저장했다. - 이제 arr1에서 하나의 리스트를 꺼낸다. - arr2를 탐색하면서 arr1에서 꺼낸 리스트의 숫자들을 행렬 곱을 해주고 이를 ..

[Level 2] 2개 이하로 다른 비트

https://programmers.co.kr/learn/courses/30/lessons/77885 코딩테스트 연습 - 2개 이하로 다른 비트 programmers.co.kr 접근 이런 문제를 규칙을 잘 찾아야할 필요가 있다. 규칙은 다음과 같다. 짝수일 때는 맨 뒤에 있는 0을 1로 변경한다. 홀수일 때는 맨 뒤에 있는 0을 1로 변경하고 그 다음을 0으로 변경한다. 이를 통해 해를 구할 수 있다. 구현 - 7을 bin으로 변경하면 0b111이 되어 0을 찾을 수 없다. 따라서 이러한 경우를 대비하여 미리 앞에 0을 추가한다. - 이어서 문자열로 변경하고 rfind()를 사용하여 '0'의 위치를 idx에 넣는다. - 이후 number가 홀수일 때는 idx+1을 0으로 변경한다. - 위의 과정이 모두 ..

[알고리즘] 정렬 : 삽입정렬

삽입정렬은 원소가 자신의 자리를 찾고 해당 자리에 삽입되면서 정렬하는 기법이다. 숫자 카드를 손에 들고 있을 때 숫자들을 오름차순으로 정렬한다고 생각해보면 쉽게 연상할 수 있다. 개념 오름차순 기준으로 설명한다. N개의 원소가 있을 때 1번 인덱스의 원소부터 N-1번 인덱스의 원소까지 탐색을 진행한다. 현재 인덱스를 기준으로 이전 인덱스와 비교를 한다. 만약 이전 인덱스가 더 크다면 현재 인덱스의 원소가 있어야하는 자리는 이전 인덱스이기 때문에 자리를 스왑한다. 스왑 후에도 이전 인덱스가 더 크다면 계속해서 자리를 스왑한다. 이 과정에서 이전 인덱스가 더 작거나 더 이상 비교할 원소가 없을 때는 비교를 종료한다. 위의 과정을 반복하면 정렬이 된다. 구현 10개의 숫자가 랜덤하게 나열되어 있다. for문을..

CS/알고리즘 2021.09.26

[알고리즘] 정렬 : 선택정렬

선택 정렬은 오름차순 기준일 때 범위 내에서 최솟값을 찾아 앞자리의 숫자와 자리를 변경해 나간다. 최솟값 또는 최댓값을 선택한다는 의미로 선택 정렬이라는 이름이 붙었다. 개념 오름차순 기준으로 설명한다. N개의 원소가 있을 때 0~N-1까지 탐색을 진행하여 최솟값을 찾는다. 찾은 최솟값과 0번째 인덱스에 있는 숫자와 스왑을 한다. 위의 과정을 통해 첫 번째 자리는 정렬이 된 것이다. 이후 1~N-1까지 탐색을 진행하여 최솟값을 찾고 1번째 인덱스에 있는 숫자와 스왑을 한다. 위의 과정을 반복하여 정렬을 한다. 구현 10개의 숫자가 랜덤하게 나열되어 있다. 첫 번째 for문의 i인덱스는 최솟값을 찾아서 해당 인덱스와 i 인덱스와 자리를 변경할 때 사용된다. 두 번째 for문은 i인덱스부터 탐색을 진행한다...

CS/알고리즘 2021.09.24
728x90
반응형