77 lines
3.6 KiB
Markdown
77 lines
3.6 KiB
Markdown
## **❖ Javascript / Typescript**
|
|
- ### **► 배열 매서드**
|
|
- ### **◼︎ Array.slice(start_idx, end_idx)**
|
|
id:: 68692600-551c-488b-ad74-de8145729133
|
|
- **배열에서 특정 범위의 인덱스 부분만 잘라내서 그 배열을 반환하는 매서드**
|
|
- **end_idx는 생략 가능하다**
|
|
- 이 경우에는 start_idx 부터 끝까지 반환한다.
|
|
- **배열의 start_idx 인덱스 부터 end_idx - 1 인덱스까지의 배열을 잘라내서 반환홤**
|
|
- 예를 들면 arr.slice(2,7) 은 arr의 인덱스2 부터 인덱스 6까지의 배열을 반환함.
|
|
- **범위를 초과해도 에러를 내지 않음. 그저 빈 배열을 반환할 뿐임.**
|
|
- **아무리 호출해도 원본 배열 자체를 바꾸지는 않는다.**
|
|
- ```javascript
|
|
const arr = [0,1,2,3,4,5,6,7,8,9,10];
|
|
|
|
const arr1 = arr.slice(2); // [2,3,4,5,6,7,8,9,10]
|
|
const arr2 = arr.slice(5,10); // [5,6,7,8,9]
|
|
const arr3 = arr.slice(12); // []
|
|
```
|
|
- ## **❖ Python**
|
|
- ## **❖ C**
|
|
- ## **❖ Java**
|
|
- ## **❖ 프로그래밍 관련 이론 정리**
|
|
- ### **► 알고리즘**
|
|
- ### **◼︎ 진수변환 알고리즘**
|
|
- ◉ **B진수 숫자 N을 10진수로 바꾸기(누적곱)**
|
|
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진수로 바꾸기(나머지 계산법)**
|
|
id:: 6872521b-6fe5-4b65-a929-38c176052368
|
|
- 최종 변환 결과 result 를 배열로서 초기화
|
|
- N이 0이 될 때까지 반복문을 돌림
|
|
- val = N%B
|
|
- 이때 계산된 val값을 B진수에 맞게 변환에서 result 배열에 삽입.
|
|
- 앞에서부터 순서대로 넣는다.
|
|
- N = N//B
|
|
- result 배열을 맨 마지막 인덱스부터 역순으로 읽으면 그것이 최종 변환 결과.
|
|
- ### **◼︎ 유클리드 호제법(최소공배수, 최대공약수 구하기)**
|
|
- ◉ **최대공약수(GCD) 구하기**
|
|
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 예시코드
|
|
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) 구하기**
|
|
id:: 687256b1-be35-4052-a12e-133e2c3b2f50
|
|
- 두 수 a,b와 그 수의 최대공약수(GCD)를 알면 a,b의 최소공배수(LCM)는 다음과 같다.
|
|
- LCM = (a * b) / GCD
|
|
- ### **► 사소한 테크닉**
|
|
- ### **◼︎ 소수점 올림 연산(ceil)**
|
|
id:: 68725357-aae4-4805-9550-21927cf3731a
|
|
- 대부분의 언어에는 ceil이라는 올림연산 메서드를 지원하지만 사용할 수 없는 환경일 경우에는 다음과 같이 계산한다.
|
|
- ```python
|
|
ceil(x/y) = (x+y-1)//y
|
|
```
|
|
- |