20250712 logseq
This commit is contained in:
parent
2b5c279c3b
commit
3ee942a310
@ -153,4 +153,59 @@ deck:: Logseq/coding tip
|
||||
```
|
||||
- ## **❖ C**
|
||||
- ## **❖ Java**
|
||||
- ## **❖ 프로그래밍 관련 이론 정리**
|
||||
- ## **❖ 프로그래밍 관련 이론 정리**
|
||||
- ### **► 알고리즘**
|
||||
- ### **◼︎ 진수변환 알고리즘**
|
||||
- ◉ **B진수 숫자 N을 10진수로 바꾸기(누적곱)** #card
|
||||
id:: 687250f4-c492-4481-90b4-2894f302b02d
|
||||
- 최종 변환 결과 result 를 0으로 초기화
|
||||
- B진수 숫자 N의 가장 왼쪽자리부터 한자리씩 순회하면서 진행
|
||||
- 순회하며 읽은 값을 10진수로 바꿈(10 이상의 수는 A=10, B=11 등등), 이 값을 val로 지정
|
||||
- result = result*B + val
|
||||
- 모든 자리수에 대해 수행하고 나면 최종적으로 result에 10진수로 변환된 숫자가 나옴.
|
||||
- ◉ **10진수 숫자 N을 B진수로 바꾸기(나머지 계산법)** #card
|
||||
id:: 6872521b-6fe5-4b65-a929-38c176052368
|
||||
- 최종 변환 결과 result 를 배열로서 초기화
|
||||
- N이 0이 될 때까지 반복문을 돌림
|
||||
- val = N%B
|
||||
- 이때 계산된 val값을 B진수에 맞게 변환에서 result 배열에 삽입.
|
||||
- 앞에서부터 순서대로 넣는다.
|
||||
- N = N//B
|
||||
- result 배열을 맨 마지막 인덱스부터 역순으로 읽으면 그것이 최종 변환 결과.
|
||||
- ### **◼︎ 유클리드 호제법(최소공배수, 최대공약수 구하기)**
|
||||
- ◉ **최대공약수(GCD) 구하기** #card #depth-2
|
||||
id:: 687253f3-7eb2-421e-b8c0-d9b96d4d7323
|
||||
- 입력한 두 수의 최대공약수를 구하는 함수 GCD에서 아래의 두 공식이 성립한다.
|
||||
- GCD(a, b) = GCD(b, a % b)
|
||||
- GCD(a, 0) = a
|
||||
- 위의 공식을 바탕으로 다음의 과정을 통해 최대공약수를 구한다.(a>=b)
|
||||
- 1. r = a%b
|
||||
- 2. a-b, b=r 로 값 갱신
|
||||
- 3. b = 0이면, a가 최대공약수
|
||||
- 4. b != 0이면 다시 1번부터 실행
|
||||
- 유클리드 호제법 gcd 예시코드 #card
|
||||
id:: 687255f3-27a7-4bef-a684-60daab2fa33f
|
||||
- 재귀방식
|
||||
- ```python
|
||||
def gcd(a,b):
|
||||
return a if b==0 else gcd(b, a%b)
|
||||
```
|
||||
- 반복문 방식
|
||||
- ```python
|
||||
def gcd(a,b):
|
||||
while b:
|
||||
a, b = b, a%b
|
||||
return a
|
||||
```
|
||||
- ◉ **최소공배수(LCM) 구하기** #card
|
||||
id:: 687256b1-be35-4052-a12e-133e2c3b2f50
|
||||
- 두 수 a,b와 그 수의 최대공약수(GCD)를 알면 a,b의 최소공배수(LCM)는 다음과 같다.
|
||||
- LCM = (a * b) / GCD
|
||||
- ### **► 사소한 테크닉**
|
||||
- ### **◼︎ 소수점 올림 연산(ceil)** #card
|
||||
id:: 68725357-aae4-4805-9550-21927cf3731a
|
||||
- 대부분의 언어에는 ceil이라는 올림연산 메서드를 지원하지만 사용할 수 없는 환경일 경우에는 다음과 같이 계산한다.
|
||||
- ```python
|
||||
ceil(x/y) = (x+y-1)//y
|
||||
```
|
||||
-
|
||||
@ -1,75 +1,5 @@
|
||||
deck:: Logseq/coding tip
|
||||
|
||||
-
|
||||
- ## **진수변환 알고리즘**
|
||||
- **B진수 숫자 N을 10진수로 바꾸는 법(누적곱 방식)**
|
||||
id:: 68458948-9821-42c7-bb19-85d7c7ad4b8d
|
||||
- N의 왼쪽부터 한 자리씩 누적해서 곱하고 더하는 방식
|
||||
- 알고리즘
|
||||
- 최종결과 res를 0으로 초기화
|
||||
- 반복문을 통해 N의 왼쪽숫자부터 하나씩 순회함.
|
||||
- 순회하면서 읽은 값을 10진수로 바꾸고(A=10, B=11...) 그 값은 val에 저장.
|
||||
- res = res*B + val
|
||||
- 반복문을 모두 돌고 나면 최종적으로 res에 변환값이 들어가있음.
|
||||
- **10진수 숫자 N을 B진수로 바꾸는 법(나머지 계산법)**
|
||||
id:: 68458b0d-5584-48bf-8bb4-aad6449b0193
|
||||
- N을 B로 계속 나누면서 그때마다 나머지값을 통해 변환하는 방식
|
||||
- 알고리즘
|
||||
- 최종 결과 문자열 res를 선언.
|
||||
- N이 0이 될 때까지 반복문을 순회함.
|
||||
- val에 N을 B로 나눈 나머지 값을 저장.
|
||||
- val값을 진법에 맞게 변환해서 res에 넣음.(앞에서 부터 넣는다)
|
||||
- N을 B로 나눈 몫으로 N을 재선언(N=N//B)
|
||||
- 위의 과정을 반복한 뒤 반복문을 빠져나오면 res에는 최종 변환결과가 역순으로 들어가있음.
|
||||
-
|
||||
- ## **소수점 올림 연산**
|
||||
- **ceil함수를 사용하지 않는 방법**
|
||||
id:: 68494b21-76da-4013-a61a-8c8cd812e253
|
||||
- ```python
|
||||
ceil(x/y) = (x+y-1)//y
|
||||
```
|
||||
-
|
||||
- ## **최소공배수/최대공약수 구하기 (유클리드 호제법)**
|
||||
- **최대공약수(GCD) 구하기**
|
||||
id:: 685d3d73-9ff0-4ec5-88b0-913cc9d52da5
|
||||
- 두 수 a,b가 있을 때, a를 b로 나눈 나머지를 r이라 하면 a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
|
||||
- 즉 위의 과정을 계속 반복해서 나머지가 0이 될 때까지 반복하면 0이되기 직전의 수가 최대 공약수가 된다.
|
||||
- 이것은 반복문으로, 또는 재귀함수로 구할 수 있다.
|
||||
- 예제코드(파이썬 기준)
|
||||
- 재귀함수로 구현
|
||||
id:: 685d3e0d-40b4-4dd8-a43e-75ee4044f0a6
|
||||
- ```python
|
||||
def GCD(a,b) :
|
||||
x = max(a,b)
|
||||
y = min(a,b)
|
||||
if x%y == 0 :
|
||||
return y
|
||||
else :
|
||||
return GCD(y, x%y)
|
||||
|
||||
a = 18
|
||||
b = 24
|
||||
print(GCD(a,b)) # 6
|
||||
```
|
||||
- 반복문으로 구현
|
||||
id:: 685d3fbd-eaa7-438f-b0dc-ab5bfbe9acac
|
||||
- ```python
|
||||
a = 18
|
||||
b = 24
|
||||
|
||||
while b != 0:
|
||||
r = a % b
|
||||
a = b
|
||||
b = r
|
||||
|
||||
print(a) # 6
|
||||
|
||||
```
|
||||
- **최소공배수(LCM) 구하기**
|
||||
- 두 수 a,b와 그 수의 최대공약수(GCD)를 알면 a,b의 최소공배수는 다음과 같다.
|
||||
id:: 685d41ca-1832-434c-a919-0f67a2a37ec0
|
||||
- LCM = (a*b) / GCD(a,b)
|
||||
-
|
||||
- ## **파이썬, 자바스크립트 반복문 순회 및 객체/딕셔너리 순회**
|
||||
- ### **► 일반적인 반복가능 객체를 활용한 반복문 순회(기본 순회)**
|
||||
- **● pythron**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user