1. 유클리드 호제법유클리드 호제법(또는 유클리드 알고리즘, Euclidean Algorithm)은 두 양의 정수의 최대공약수를 구하는 방법 중 하나이다.여기서 호제라는 말은 서로 나눈다는 것을 의미한다. 2. 최대공약수의 정의최대공약수(GCD, Greatest Common Divisor)는 두 개 이상의 정수의 공통 약수 중 가장 큰 양의 정수이다.또한 최대공약수가 $1$인 두 정수를 서로소(coprime)라고 한다. ($0$과 어떤 정수 $a$의 최대공약수는 $a$로 정의할 수 있다. $0$은 모든 정수의 배수이기 때문이다.) 3. 최대공약수의 특징두 정수 $a$와 $b$의 최대공약수 $\gcd(a, b)$에 대해, $ax + by = \gcd(a, b)$를 만족하는 정수 $x$, $y$가 존재한다...
CS
1. 연산자 (산술적 왼쪽 시프트, Arithmetic Left Shift)왼쪽으로 비트를 이동시키고, 이동 후 오른쪽에 생긴 빈 공간은 0 으로 채운다.비트를 한 번 이동시킬 때마다 값에 2가 곱해진다.예 : 1 → $2^3 = 8$ 2. >> 연산자 (산술적 오른쪽 시프트, Arithmetic Right Shift)오른쪽으로 비트를 이동시키고, 이동 후 왼쪽에 생긴 빈 공간은 양수의 경우 0 으로, 음수의 경우 1 로 채운다.즉, 부호 비트를 유지하면서 오른쪽으로 비트를 이동시킨다.비트를 한 번 이동시킬 때마다 값이 2로 나눠진다.예 : -8 >> 2 → $-8 \div 4 = -2$ 3. >>> 연산자 (논리적 오른쪽 시프트, Logical Right Shift)C/C++에 존재하지 않는 연산자..
1. 버블 정렬이란?서로 인접한 두 원소를 비교하고, swap 연산을 수행하면서 정렬하는 방식이다.가장 큰 값이 배열의 끝으로 이동하는 과정이 물방울이 수면으로 떠오르는 듯한 모습을 보이기 때문에 버블 정렬이라는 이름이 붙었다. 2. 버블 정렬의 동작 과정배열의 처음부터 끝까지 순회하면서 인접한 두 원소를 차례대로 선택한다.인접한 두 원소를 비교하여 정렬 순서와 맞지 않다면, 서로 자리를 교환한다.배열의 끝에 가장 큰 값이 정렬되면, 다음 반복에서는 그 값을 제외하고 정렬한다.배열이 완전히 정렬될 때까지 1~3 과정을 반복한다. 3. 버블 정렬의 구현 코드아래는 버블 정렬을 구현한 코드이다.void bubble_sort(vector &nums) { int n = nums.size(); for ..
1. IN서브쿼리의 결과를 모두 가져온 후, 메인 쿼리의 WHERE 절에서 결과 집합과 비교하는 방식이다.서브쿼리의 결과에 NULL 이 포함되는 경우에는 결과가 의도와 다르게 동작할 수 있으므로 주의해야 한다. 아래는 IN 을 사용하여 작성한 쿼리의 예시이다.SELECT *FROM aWHERE a.key IN ( SELECT b.key FROM b);b 테이블에 먼저 접근한다.b.key 를 IN 리스트에 나열한 후 a.key 에 공급한다.즉, 이 쿼리에서 b 테이블은 공급자 역할을 수행한다. 2. EXISTS서브쿼리에서 조건을 만족하는 행이 존재하는지 여부를 확인하는 방식이다.즉, 서브쿼리에서 결과 집합을 반환하는 것이 아니라, 서브쿼리에서 조건을 만족하는 행을 찾는 즉시 반환하는 것이다. 따..
1. WITH 절과 공통 테이블 표현식 (CTE, Common Table Expression)WITH 절은 MySQL에서 공통 테이블 표현식(CTE)을 정의하기 위해 사용하는 구문이다.공통 테이블 표현식(CTE)은 단일 SQL 문 내에서 임시 이름이 붙은 임시 결과 집합으로, 해당 SQL 문 내에서 여러 번 참조하여 사용할 수 있다. 2. WITH 절과 공통 테이블 표현식(CTE)의 특징WITH 절과 공통 테이블 표현식은 성능 최적화 관점에서 반복된 서브쿼리를 줄이고 가독성과 유지보수성을 높이는 데 도움을 준다.중첩된 서브쿼리를 사용하지 않고도 논리적으로 쿼리를 나눌 수 있다.공통 테이블 표현식은 같은 statement 내에서 여러 번 참조될 수 있으며, 여러 번 참조되더라도 한 번만 실행되어 그 결과가..
2의 거듭제곱을 외우고 있다고 말하면 그걸 왜 외우냐는 질문이 가장 많이 들어온다.어릴 적에 심심해서 외웠던 게 시작이었던 것 같다. 어릴 적에 10제곱까지 외웠다가 20제곱까지 늘렸던 기억이 난다.대학교 와서 27제곱까지 외웠던 것 같다.뇌 용량의 한계로 더 이상 외우려고 하지 않았는데,최근에 알고리즘 공부하고 코드 짜다보니 그 유명한 2^31 - 1 = 2147483647을 자주 접하게 되었다.그래서 내친김에 32제곱까지 외워버렸다. 2^1 = 22^2 = 42^3 = 82^4 = 162^5 = 32 2^6 = 642^7 = 1282^8 = 2562^9 = 5122^10 = 1024 2^11 = 20482^12 = 40962^13 = 81922^14 = 163842^15 = 32768 2^16 = 6..