[Algorithm] 입국 심사
문제 설명 입국 심사관이 사람이면 반드시 심사관에 따라 속도는 다를 것 입니다. 여러분이 입국한 날이 첫 출근인 심사관과 오늘부로 20년 근속을 찍은 심사관까지 다양하겠죠. 첫 출근인 심사관은 긴장해서 입국 심사가 늦어지고, (신입 심사관이라고 하겠습니다.) 20년 근속 심사관은 신참 보다는 속도가 분명 더 빠를 것입니다. (경력 심사관이라고 ...
문제 설명 입국 심사관이 사람이면 반드시 심사관에 따라 속도는 다를 것 입니다. 여러분이 입국한 날이 첫 출근인 심사관과 오늘부로 20년 근속을 찍은 심사관까지 다양하겠죠. 첫 출근인 심사관은 긴장해서 입국 심사가 늦어지고, (신입 심사관이라고 하겠습니다.) 20년 근속 심사관은 신참 보다는 속도가 분명 더 빠를 것입니다. (경력 심사관이라고 ...
컴파일러의 동작 과정을 확인하기 전, 먼저 프로그램의 생성 과정을 살펴보겠습니다. 프로그램을 만들기 위해서는 소스코드가 필요하며, 소스코드는 전처리기, 컴파일러, 어셈블러, 링커 총 4가지의 과정을 통해 프로그램으로 출력됩니다. 위의 4가지 과정을 빌드 라고 부릅니다. 프로그램 생성 과정 과정 이름 전처리기...
분할 정복 분할 정복은 분할한 값들을 정복해 나가면서 해결하는 알고리즘입니다. 이를 활용한 대표적인 정렬 알고리즘은 이진 탐색, 합병 정렬, 퀵 정렬 등이 있습니다. 정렬 알고리즘 비교 |정렬 알고리즘|최대 실행 시간|최소 실행 시간|평균 실행 시간| |——|—|—|—| |선택 정렬| O(n^2)| O(n^2)| O(n^2)| |삽입 정렬| O(n...
정수 A와 B의 최대 공약수를 구하는 가장 간단한 방법은 A가 B보다 크거나 같을 때, 1부터 B까지 모든 정수로 A와 B가 동시에 나누어 떨어지는지 확인하면 됩니다. 그러나 이 방식은 O(log(B)) 라는 시간 복잡도이기 때문에 B의 크기가 매우 크면 불리합니다. 이 성능을 개선하기 위해 사용되는 것이 유클리드 호제법 입니다. 두 정수 A와 B...
전송 계층에서 사용하는 프로토콜은 UDP와 TCP가 존재합니다. 먼저 UDP는 데이터의 송수신이 보장되지 않는 통신이지만 통신속도가 TCP와 비교했을 때 비교적 빠르다는 장점이 있습니다. 실생활에서 볼 수 있는 UDP 통신은 비디오 스트리밍이 있습니다. TCP의 경우 UDP와 정반대의 특징을 가지고 있습니다. 패킷 송수신의 순서를 지키며 통신합니다...
1. 이더넷이란 2. 통신매체 규격 3. 특징 4. 최신의 이더넷 5. 출처 이더넷이란 여러 통신 장치가 연결된 네트워크 환경 을 이더넷이라고 합니다. 통신 장치의 고유주소인 MAC Address(16진수로 표현된 48비트의 고유주소)를 가지고 OSI 7계층 중 물리 계층 과 데이터 링크 계층 에서 사용되는 통신기술입니다. 물리 계층에서는 데이...
1. 부분 문제 나누기 2. 재귀적 풀이와 순환적 풀이 3. 문제 분할 방법 4. 코드 구현 5. 활용 문제 부분 문제 나누기 동적 프로그래밍은 한 문제를 여러 문제로 나누어 해결 하는 기법입니다. 처음 동적 프로그래밍(이후 DP)을 접한 분들은 시작부터 막막하실 수 있습니다. “한 문제를 어떻게 여러 문제로 나눈다는 거지?” 라고 당연히 의문...
너비 우선 탐색과 깊이 우선 탐색 1. 너비 우선 탐색 2. 깊이 우선 탐색 3. 두 탐색의 차이 4. 코드 구현 5. 활용 문제 너비 우선 탐색 너비 우선 탐색(Breadth First Search)은 넓게 탐색하는 알고리즘입니다. 너비 우선 탐색(이후 BFS)의 원리는 현재 노드의 자식 노드를 먼저 방문한다. 입니다. 미로를 예시로 설명 해...
일관성 없는 코드 문제의 코드를 보면 각 클래스 설계에 일관성이 없는 것을 확인할 수 있습니다. 이 문제점을 해결하고자 이번 포스트를 기획하게 되었습니다. 코드 개선 작업은 다음의 목표를 두고 진행합니다. 리팩토링 기능 개선 리팩토링 작업에서는 객체 지향에 맞게 수정하고 기능 개선 작업에서 기존 기능을 변경하거나 새로운 기능을 추가하는...
Computer Science “코더와 개발자를 구분하는 기준 중 하나는 컴퓨터 구조를 알고 있느냐에 있다.” IT의 발전과 수요에 따라 많은 프로그래머들이 탄생하고 있습니다. 그러나 다른 프로그래머 보다 더 빠르게 성장하기 위해서는 기본적인 컴퓨터 구조 지식이 필수입니다. 따라서 CS 카테고리에서는 컴퓨터 구조의 일부분을 설명하는 포스팅을 올리도록 ...