전체 글 142

[알고리즘] 다이나믹 프로그래밍(동적 계획법)

다이나믹 프로그래밍(동적 계획법) 큰 문제를 작은 문제로 나눠서 푸는 알고리즘 DP → 중복⭕ 분할정복(Divid & Conquer) → 중복❌ 정답을 한 번 구했으면, 정답을 어딘가에 메모해놓는다(memorization) Overlapping Subproblem(중복되는 부분 문제): 문제를 작은 문제로 쪼갤 수 있다. 큰 문제와 작은 문제를 같은 방법으로 풀 수 있다 Optimal Substructure(최적 부분 구조): 문제의 정답을 작은 문제의 정답에서 구할 수 있다 int memo[100]; int fibonacci(int n){ if( n 0){ return memo[n]; } memo[n] =fibonacci(n-1) + fibonaccai(n-2); return memo[n]; } } /..

알고리즘/공부 2021.09.20

[알고리즘] 수학

나머지 연산 (A+B) mod M = ((A mod M) + (B mod M)) mod M (A*B) mod M = ((A mod M) * (B mod M)) mod M (A-B) mod M = ((A mod M) - (B mod M) +M) mod M (음수가 나올 수 있기 때문에) 나눗셈의 경우는 성립하지 않는다 최대 공약수(GCD) 유클리드 호제법(Euclidean algorithm) a를 b로 나눈 나머지를 r이라고 했을 때, GCD(a, b) == GCD(b, r) //재귀함수 사용 int gcd(int a, int b){ if( b == 0){ return a; } else { return gcd(b, a%b); } } //재귀함수를 사용하지 않고 int gcd(int a, int b){ wh..

알고리즘/공부 2021.09.20

[백준] 1644번: 소수의 연속합

문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 가지) 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 표현도 적합하지 않다. 자연수가 주어졌을 때, 이 자연수를 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 구하는 프로그램을 작성하시오. 1644번: 소수의 연속합 첫째 줄에 ..

알고리즘/BOJ 2021.09.20

[VanillaJS] CRUD 게시판 만들기

간단한 토이 프로젝트로 바닐라js와 css만 사용하여 CRUD한 게시판을 만들어 보았다. figma도 더 익혀볼겸 figma로 생각한 바를 대략적으로 만들어봤다. WRITE과 EDIT창은 모달로 구현하기로 했다. 제목을 누르면 모달창이 띄워져서 글을 읽을 수 있게 하였다. 모달창은 x아이콘이나 바깥부분을 누르면 닫히도록 했다. edit은 기존 write의 모달창을 그대로 사용하되, 저장되어있는 제목, 작성자, 글이 창에서 보이도록 해주었다. write와 동일한 모달창을 사용하기 때문에 게시판에 올릴때 새로운 값인지 아닌지를 확인했다. edit에서 저장한 것이라면 기존 값을 지워주고 수정된 값을 저장하였다. 게시판은 리스트보다 테이블로 만드는게 더 편한 것 같다. 다음에는 node.js에 db 연결해서 진..

프로젝트 2021.09.16

[백준] 9251번: LCS 2 (c++)

문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 9252번: LCS 2 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 문제조건 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다. 첫째 줄에 입력으로 주어진 두 문자..

알고리즘/BOJ 2021.09.16

[Javascript] 구조 분해 할당 (Destructing)

구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 자바스크립트 표현식이다. 잘 사용하면 코드를 줄일 수 있고, 보기도 좋기 때문에 여러가지 경우를 정리해 보자. 배열 구조 분해 기본 구조 const arr = [1,2,3]; const [x,y,z] = arr; const [a, ,b] = arr; console.log(x,y,x); //1 2 3 console.log(a,b); //1 3 인덱스를 이용해 접근할 필요 없이 원하는 값들을 배열에서 가져올 수 있다. 배열의 순서대로 값을 가져오게 된다. 중간 값을 빼고 받고 싶다면 빈칸으로 놓으면 된다. default값(기본 값) 설정 const arr = [1] const[a=5, b=7] = arr; con..

JavaScript 2021.09.15

[백준] 1806번: 부분합 (c++)

문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제조건 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. 풀이 투포인터 알고리즘의 대표..

알고리즘/BOJ 2021.09.15

[운영체제] 교착상태 (Deadlock, 데드락)

교착상태(deadlock)는 프로세스가 리소스를 점유하고 놓아주지 않거나, 어떠한 프로세스도 리소스를 점유하지 못하는 상태가 되어 프로그램이 멈추는 현상을 말한다. 시스템 모델 시스템은 경쟁하는 프로세스들 사이에 분배되어야 할 유한한 자원들로 구성이되며, 여러 프로세스들을 해당 자원을 점유하기 위해 서로 경쟁 구도에 놓여있다. 메모리 공간, CPU 주기, 파일, 입출력 장치 등이 이러한 자원 유형이 예이다. 동기화 도구들(mutex, semaphore)도 시스템 자원 이다. 스레드는 다른 프로세스의 자원을 사용할 수 있으며 이러한 자원 사용으로 인해 교착 상태가 발생할 수 있다. 단. 이는 커널의 문제가 아니다(OS측에서 감시를 대신 한다). 스레드가 자원을 사용하기 위해서는 반드시 요청을 해야 하고 사..

운영체제 2021.09.14

[Javascript] 호이스팅 (Hoisting)

호이스팅 (Hoisting) “Before run all the code, the browser first get all declarations, hoisting is the name of this process.” scope(스코프) 안에서의 변수 선언을 최상위에서 선언한 것과 동등하다는 의미를 가진다. 즉, 변수가 선언되기 이전에 변수를 사용하면, 변수가 사용된 블럭 범위의 맨 위로 변수를 끌어올린다는 말이다. 호이스팅(Hoisting)은 JavaScript 인터프리터가 코드를 해석할 때 변수 및 함수의 선언 처리, 실제 코드 실행 두 단계로 나눠서 처리하기 때문에 발생하는 현상이다. JavaScript 인터프리터가 내부적으로 코드를 이런 방식으로 처리한다는 것일 뿐, 실제 코드 라인이 변경되거나 하..

JavaScript 2021.09.13

[Javascript] 실행 컨텍스트 (Execution Context)

실행 컨텍스트는 자바스크립트의 동작 원리를 담고 있는 핵심 개념이다. 실행 컨텍스트를 이해하면 자바스크립트가 스코프를 기반으로 식별자와 식별자에 바인딩된 값(식별자 바인딩)을 관리하는 방식과 호이스팅이 발생하는 이유, 클로저 동작 방식, 그리고 태스크 큐와 함께 동작하는 이벤트 핸들러와 비동기 처리의 동작 방식을 이해할 수 있다. 실행 컨텍스트 (Execution Context) 실행 컨텍스트는 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다. 식별자(변수, 함수, 클래스 등의 이름)를 등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한 내부 메커니즘으로, 모든 코드는 실행 컨텍스트를 통해 실행되고 관리된다. 식별자와 스코프는 실행 컨텍스트의 렉시컬 환경으..

JavaScript 2021.09.13
반응형