본문 바로가기

전체 글

(163)
[Algorithm] 분할 정복(Divide and Conquer) 분할정복은 큰 문제를 작은 부분 문제로 나눈 후 각각을 해결하고, 이를 통해 전체 문제를 해결하는 알고리즘 기법. 이러한 방식은 컴퓨터 과학 분야에서 널리 사용되며, 대표적인 예로는 퀵정렬, 병합정렬, 이진 탐색 등이 있습니다. 이를 해결하기 위해서는 다음과 같은 세 가지 단계가 필요합니다. 1. 분할(Divide) 문제를 작은 문제 부분으로 나눕니다. 일반적으로 이 과정은 재귀적으로 수행됩니다. 2. 정복(Conquer) 작은 부분 문제를 각각 해결합니다. 부분 문제의 크기가 충분히 작지 않으면 재귀적으로 분할합니다. 3. 결합(Combine) 작은 부분 문제의 해답을 결합하여 원래 문제의 해답을 구합니다. 분할정복의 장점과 한계점 분할정복은 문제의 크기가 커지면 일반적으로 더 빠른 알고리즘으로 복잡도..
[BOJ / Node.js] 4779. 칸토어 집합 https://www.acmicpc.net/problem/4779 4779번: 칸토어 집합 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고, www.acmicpc.net 문제 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자. 1. -가 3N개 있는 문자열에서 시작한다. 2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개..
[CS] CI/CD(Continuous Integration/Continuous Delivery)란? CI/CD는 Continuous Integration(CI)와 Continuous Delivery/Deployment(CD)를 통합해서 부르는 용어 입니다. CI/CD는 개발 과정에서 필요한 빌드, 테스트, 배포 등의 과정을 자동화합니다. CI/CD 자동화를 통해서 개발자들은 코드를 자동으로 테스트하고 배포할 수 있고 이를 통해 효율적인 작업과, 더 빠르고 더 자주 배포를 할 수 있게됩니다. CI Continuous Integration(CI)은 코드를 지속적으로 통합하는 과정을 의미합니다. 이 과정은 보통 GitHub의 PR을 통해 이루어지며, 코드의 통합은 단순히 코드와 코드를 합치는 것 뿐만 아니라 코드를 테스트하고 유효성을 검증하는 작업도 포함됩니다. 실제로 코드를 통합하는 것이 가장 중요한 부분..
[BOJ / Node.js] 17829 222-풀링 https://www.acmicpc.net/problem/17829 17829번: 222-풀링 조기 졸업을 꿈꾸는 종욱이는 요즘 핫한 딥러닝을 공부하던 중, 이미지 처리에 흔히 쓰이는 합성곱 신경망(Convolutional Neural Network, CNN)의 풀링 연산에 영감을 받아 자신만의 풀링을 만들고 이를 22 www.acmicpc.net 문제 조기 졸업을 꿈꾸는 종욱이는 요즘 핫한 딥러닝을 공부하던 중, 이미지 처리에 흔히 쓰이는 합성곱 신경망(Convolutional Neural Network, CNN)의 풀링 연산에 영감을 받아 자신만의 풀링을 만들고 이를 222-풀링이라 부르기로 했다. 다음은 8×8 행렬이 주어졌다고 가정했을 때 222-풀링을 1회 적용하는 과정을 설명한 것이다 행렬을 ..
[React] ESLint와 Prettier, Git Hook을 이용한 협업 Lintter & Code Formatter 하나의 프로젝트에서 작업자마다 각자 다른 코딩 스타일을 가지고 있고, 그것이 코드에 드러난다면 이 프로젝트를 제 3자가 읽기도 어려워지며, 팀원끼리도 다른 팀원들이 작성한 코드를 읽고 이해하기 힘들어 집니다. 이러한 요소들은 결국 비효율을 유발하게 되고 이를 극복하기 위해서 팀으로 작업을 할 때에는 여러 작업자들의 코딩 스타일을 일치시키기 위한 Lintter와 Code Formatter를 사용하는 것이 좋습니다. 자바스크립트 진영에서는 Linter로 ESLint를 Code Formatter 로는 Prettier를 사용하는 것이 일반적입니다. ESLint는 코드 자체의 문법 교정과 더불어 코드 스타일링 기능도 포함하고 있지만, Prettier는 자동으로 코드의 ..
[BOJ / Node.js] 12919. A와 B 2 https://www.acmicpc.net/problem/12919 12919번: A와 B 2 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈 www.acmicpc.net 문제 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음..
[BOJ / Node.js] 3273. 두 수의 합 https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 문제 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수열의 크기 n이 ..
[CS] 서버와 클라우드 컴퓨팅 서버란? 서버의 사전적 의미는 무언가를 제공해주는 사람이나 물건을 의미합니다. 좀 더 나아가서 우리가 일상생활, 그리고 IT 업계에서 말하는 서버는 "무언가를 제공해주는 컴퓨터"를 의미합니다. 우리는 흔히 인터넷으로 특정한 웹사이트나, 리소스에 접근합니다. 하지만 정확히 말하자면, 우리가 접근하는 대상은 웹사이트, 리소스 자체가 아니라 웹사이트와 리소스를 응답해주는 컴퓨터에 접속하는 것 입니다. 서비스를 운영하기 위해서 특정한 컴퓨터를 가동시키고, 해당 컴퓨터에서 특정 프로그램을 실행시켜서 컴퓨터에 네트워크를 통해 접근하면, 특정한 리소스를 응답해주도록 만듭니다. 그리고 인터넷을 통해서 이 컴퓨터를 외부에서 접근 가능하도록 설정합니다. 이러한 동작을 하는 컴퓨터를 우리는 "서버"라고 부릅니다. 서버 운영..

728x90