update 20251116

This commit is contained in:
songyc macbook 2025-11-16 22:03:35 +09:00
parent 3ee942a310
commit fce74c5407
15 changed files with 444 additions and 134 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -3,17 +3,17 @@ deck:: Logseq/coding tip
- ## **❖ Javascript / Typescript**
- ### **► 이차원 배열(n*m) 생성**
- id:: 6867f897-928a-4f22-8184-491fa70314db
1. Array.from() 사용법 #card
1. Array.from() 사용법
- ```javascript
const arr = Array.from({length : n}, () => new Array(m).fill(0));
```
- id:: 6867f8fc-3249-4ced-91aa-a2c951c11b0b
2. Array().fill() 사용법 #card
2. Array().fill() 사용법
- ```javascript
const arr = new Array(n).fill().map(() => new Array(m).fill(0));
```
- id:: 6867f8fe-39c6-438b-a045-4f8687ad0b1d
3. 반복문 순회 #card
3. 반복문 순회
- ```javascript
let arr = [];
for(int i=0; i<n; i++){
@ -24,7 +24,7 @@ deck:: Logseq/coding tip
}
```
- ### **► 배열 매서드**
- ### **◼︎ Array.every((element, index, array) => {조건식})** #card
- ### **◼︎ Array.every((element, index, array) => {조건식})**
id:: 686922a8-1c72-4261-8339-aff6ece36f03
- **배열의 모든 요소가 조건식을 만족하는지 확인해서 true/false를 반환하는 매서드**
- **elememt : 현재 요소, index : 현재 인덱스(생략가능), array : 원본 배열(생략 가능)**
@ -43,7 +43,7 @@ deck:: Logseq/coding tip
}); // true
arr.every(v => v===arr[0]); // false
```
- ### **◼︎ Array.slice(start_idx, end_idx)** #card
- ### **◼︎ Array.slice(start_idx, end_idx)**
id:: 68692600-551c-488b-ad74-de8145729133
- **배열에서 특정 범위의 인덱스 부분만 잘라내서 그 배열을 반환하는 매서드**
- **end_idx는 생략 가능하다**
@ -59,7 +59,7 @@ deck:: Logseq/coding tip
const arr2 = arr.slice(5,10); // [5,6,7,8,9]
const arr3 = arr.slice(12); // []
```
- ### **◼︎ Array.forEach((element, index, array) => {})** #card
- ### **◼︎ Array.forEach((element, index, array) => {})**
id:: 6869280c-f685-44c4-b73e-a33f351be582
- **배열의 모든 요소를 순서대로 순회하면서 코드를 실행하는 매서드**
- **element(현재 요소)는 반드시 필요하고, index(현재 인덱스)와 array(원본 배열)는 생략 가능하다.**
@ -75,7 +75,7 @@ deck:: Logseq/coding tip
});
// 1 2 4 5
```
- ### **◼︎ Array.reduce((acc, element, index) => {콜백함수}, initial value)** #card
- ### **◼︎ Array.reduce((acc, element, index) => {콜백함수}, initial value)**
id:: 6869298b-18fd-4524-a697-c1af9e510c34
- **배열의 각 요소별로 순회하며 누적자(acc)를 계산하고 모든 순회를 마친 뒤의 누적자를 반환하는 매서드**
- **초기값을 입력하지 않으면 기본적으로 acc는 0으로 초기화 된 채 실행된다.**
@ -88,7 +88,7 @@ deck:: Logseq/coding tip
else return acc+v;
},0); //9
```
- ### **◼︎ Array.sort((a,b)=>{콜백함수})** #card
- ### **◼︎ Array.sort((a,b)=>{콜백함수})**
id:: 686a6dfd-328e-4dd0-bd8a-abbef2ae13ee
- **배열을 정렬하는 매서드이고 기본적으로 파라미터를 입력하지 않으면 오름차순으로 정렬한다.**
- **반환값은 없고 원본 배열 자체를 변경한다.**
@ -106,14 +106,86 @@ deck:: Logseq/coding tip
arr.sort((a-b)=>b-a); //[9,8,7,5,4,3,2] 내림차순
// 이전 인덱스 요소와 다음 인덱스 요소의 차이가 모두 음수가 아니게 되도록 정렬한다
```
- ### **► Object 자료형**
- ### **◼︎ 정의 및 선언 및 접근방법**
id:: 6874a753-d361-4df8-8dd5-15bb865ac8df
- 키(key)와 값(value)을 가지는 데이터의 집합
- 자체적으로는 iterable하지 않음(반복가능한 자료형이 아님)
- 따라서 for문에서 순회할 때 for ... in Object.keys(), Object.values(), Object.entries() 와 같은 방법으로 순회해야함
- 키는 무조건 문자열과 심볼만 가능함.
- 키의 삽입 순서가 보장되지 않음.
- ```javascript
// 빈데이터 초기화 방법
let obj = {};
// 직접 선언 방법
let obj = {
"name": "Yechan",
"age" : 30
};
// 출력
console.log(obj.name);
console.log(obj["age"]);
// Yechan
// 30
// 두 방법 모두 사용 가능
```
- ### **◼︎ 키 및 값 순회**
- **for ... in**
id:: 6874a966-4831-47ed-b969-a7d6d6269a9b
- 기본적으로 Object의 키값을 순회함.
- ```javascript
let obj = {
"name": "Yechan",
"age" : 30
};
for(let key in obj){
console.log(obj[key]);
}
```
- **for ... of**
id:: 6874a9fd-e3da-475b-95d8-06889eb8ce56
- 각 객체의 매서드를 통해 키, 값, 혹은 둘 다를 직접 가져와서 순회해야함.
- ```javascript
let obj = {
"name": "Yechan",
"age" : 30
};
for key of Object.keys(obj) {
console.log(key, obj[key]);
}
// name Yechan
// age 30
// key, value 순회
for [key, value] of Object.entries(obj) {
console.log(key, value);
}
// name Yechan
// age 30
```
- ### **► 반복가능 객체에서의 순회**
- ### **◼︎ 일반적인 방법(for문)**
id:: 6874a69f-d252-4666-813b-17e1e2b50101
- for문에서 of로 하나씩 순회함
- ```javascript
const num = [1,2,3,4,5];
for(let n of num) {
console.log(n);
}
// 1 2 3 4 5
```
- ## **❖ Python**
- ### **► 이차원 배열(n*m) 생성** #card
- ### **► 이차원 배열(n*m) 생성**
id:: 6867f994-13d0-4937-90e9-d8aec7be5d67
- ```python
arr = [[0]*m for _ in range(n)]
```
- ### **► 배열 관련 매서드**
- ### **◼︎ arr.count(value)** #card
- ### **◼︎ arr.count(value)**
id:: 686a721d-df2e-4662-a6dd-c235cce8c5ac
- 리스트, 혹은 문자열에서 특정 값의 개수를 반환하는 매서드
- ```python
@ -128,7 +200,7 @@ deck:: Logseq/coding tip
print(arr.count(3)) # 3
print(arr.count(4)) # 4
```
- ### **◼︎ arr.sort()** #card
- ### **◼︎ arr.sort()**
id:: 686a726b-38e3-4adc-836a-2d0856046e73
- 원본 배열 자체를 정렬하는 매서드.
- 기본값은 오름차순이고 파라미터에 reverse=True 를 하면 내림차순으로 정렬됨.
@ -139,7 +211,7 @@ deck:: Logseq/coding tip
arr.sort() # 2 4 5 8 9
arr.sort(reverse=True) # 9 8 5 4 2
```
- ### **◼︎ sorted(arr)** #card
- ### **◼︎ sorted(arr)**
id:: 686a732c-734e-417c-b7e2-f3bfb8caa71b
- 변수로 들어온 배열을 정렬한 뒤 그 결과를 반환하는 매서드, 즉 반환값이 배열임.
- 기본값은 오름차순이고 파라미터에 reverse=True 를 하면 내림차순으로 정렬됨.
@ -156,14 +228,14 @@ deck:: Logseq/coding tip
- ## **❖ 프로그래밍 관련 이론 정리**
- ### **► 알고리즘**
- ### **◼︎ 진수변환 알고리즘**
- ◉ **B진수 숫자 N을 10진수로 바꾸기(누적곱)** #card
- ◉ **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진수로 바꾸기(나머지 계산법)** #card
- ◉ **10진수 숫자 N을 B진수로 바꾸기(나머지 계산법)**
id:: 6872521b-6fe5-4b65-a929-38c176052368
- 최종 변환 결과 result 를 배열로서 초기화
- N이 0이 될 때까지 반복문을 돌림
@ -173,7 +245,7 @@ deck:: Logseq/coding tip
- N = N//B
- result 배열을 맨 마지막 인덱스부터 역순으로 읽으면 그것이 최종 변환 결과.
- ### **◼︎ 유클리드 호제법(최소공배수, 최대공약수 구하기)**
- ◉ **최대공약수(GCD) 구하기** #card #depth-2
- ◉ **최대공약수(GCD) 구하기**
id:: 687253f3-7eb2-421e-b8c0-d9b96d4d7323
- 입력한 두 수의 최대공약수를 구하는 함수 GCD에서 아래의 두 공식이 성립한다.
- GCD(a, b) = GCD(b, a % b)
@ -183,7 +255,7 @@ deck:: Logseq/coding tip
- 2. a-b, b=r 로 값 갱신
- 3. b = 0이면, a가 최대공약수
- 4. b != 0이면 다시 1번부터 실행
- 유클리드 호제법 gcd 예시코드 #card
- 유클리드 호제법 gcd 예시코드
id:: 687255f3-27a7-4bef-a684-60daab2fa33f
- 재귀방식
- ```python
@ -197,12 +269,12 @@ deck:: Logseq/coding tip
a, b = b, a%b
return a
```
- ◉ **최소공배수(LCM) 구하기** #card
- ◉ **최소공배수(LCM) 구하기**
id:: 687256b1-be35-4052-a12e-133e2c3b2f50
- 두 수 a,b와 그 수의 최대공약수(GCD)를 알면 a,b의 최소공배수(LCM)는 다음과 같다.
- LCM = (a * b) / GCD
- ### **► 사소한 테크닉**
- ### **◼︎ 소수점 올림 연산(ceil)** #card
- ### **◼︎ 소수점 올림 연산(ceil)**
id:: 68725357-aae4-4805-9550-21927cf3731a
- 대부분의 언어에는 ceil이라는 올림연산 메서드를 지원하지만 사용할 수 없는 환경일 경우에는 다음과 같이 계산한다.
- ```python

7
pages/C.md Normal file
View File

@ -0,0 +1,7 @@
deck:: Logseq/coding tip
- ## **► C언어 변수타입 크기 정리**
- ![image.png](../assets/image_1749986661502_0.png) #card
id:: 690f2348-194d-46ec-bf5c-855c25c28cd5
- ![image.png](../assets/image_1749986614051_0.png)
-

3
pages/Java.md Normal file
View File

@ -0,0 +1,3 @@
deck:: Logseq/coding tip
-

92
pages/Python.md Normal file
View File

@ -0,0 +1,92 @@
deck:: Logseq/coding tip
- ## **► 이차원 배열(n*m) 생성** #card
id:: 690daa52-9b76-4367-bcf3-386b33637eb0
- ```python
arr = [[0]*m for _ in range(n)]
```
- ## **► lambda(람다) 함수**
- ### **◼︎ 정의** #card
id:: 690daba5-24c2-4cdc-9373-3e1924b96cb7
- 파이썬에서 이름이 없는 익명 함수를 만드는데 사용되는 키워드
- def 키워드로 정식으로 정의되는 함수보다 훨씬 간결하게, 간단한 함수를 만들 때 사용됨
- ### **◼︎ 핵심 개념** #card
id:: 690dae10-920a-4ce0-a098-c9053307f872
- 이름이 없다 : 변수에 할당하여 사용할 수는 있지만 함수 자체에는 이름이 없다.
- 일회성 : 주로 다른 함수의 인자로 전달되어 한 번만 사용되고 사라지는 용도로 많이 쓰인다.
- 변수에 할당해서 여러번 사용은 가능하지만 주된 사용법이 아니고 권장되지도 않는다.
- 간결함 : 복잡한 로직이 아닌, 간단한 연산을 수행하는 함수를 빠르게 정의할 수 있다.
- 함수 내부에서 변수를 할당하거나 여러 줄의 복잡한 문장을 사용할 수 없고 오직 하나의 표현식만 허용된다.
- ### **◼︎ 구문** #card
id:: 690dae7c-8d83-4eed-99d6-40f83ec11494
- ```python
lambda 인자1, 인자2, ... : 함수정의
# 인자의 개수가 여러개라면 여러개를 콜론으로 구분해서 쭉 나열한다
# 인자들을 나열한 뒤 콜론으로 구분한 뒤 뒤에 함수를 정의한다.
# 변수로 할당하기
add_lambda = lambda x, y : x+y
print(add_lambda(1,2)) # 3
# 고차함수에 인자로 전달해서 선언하기
nums = [1,2,3,4,5]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2,4]
```
- ## **► 유틸 함수 모음**
- ### **◼︎ 정렬함수 (sort, sorted)**
- **◉ sort() vs. sorted() 간단 비교**
- ![image.png](../assets/image_1762505444818_0.png) #card
id:: 690db22d-8f77-40b6-8d9a-64fe17f33459
- ![image.png](../assets/image_1762505372788_0.png)
- **◉ 사용 인자**
- reverse #card
id:: 690db312-4c67-4fb8-b41a-7c136b2b9f73
- 이 키워드가 True이면 내림차순, False면 오름차순으로 정렬함
- 기본값은 False이고 따라서 따로 지정하지 않으면 기본적으로 오름차순으로 동작함.
- ```python
numbers = [3, 1, 4, 1, 5, 9]
numbers_reverse = [3, 1, 4, 1, 5, 9]
numbers.sort() # [1,1,3,4,5,9]
numbers.sort(reverse=True) # [9,5,4,3,1,1]
```
- key #card
id:: 690db41f-a507-4ce3-93cb-57f749174d01
- 정렬의 기준을 지정하는 함수를 인자로 받음
- 리스트의 모든 인자에 대해 이 key에 들어간 한수를 한번씩 입력으로 들어간 뒤 이에 대한 비교용 값(proxy value)을 계산해서 반환함.
- 이 반환된 값을 기준으로 오름차순(reverse=True의 경우에는 내림차순)으로 정렬함
- key에 전달되는 함수는 다음과 같다
- len, abs, str 등 내장함수
- lambda를 활용한 복잡한 객체나 특정 조건에 대한 정렬기준을 정의
- def로 정의된 함수로 정렬기준이 복잡하고 여러줄의 코드가 필요할 때 사용
- key에 전달된 함수는 단일 값, 혹은 튜플형태의 반환값을 가져야 한다.
- 튜플형태라면 앞 요소부터 기준에 맞게 정렬하고 같을 경우 그 다음 요소를 비교해서 정렬한다.
- 예제 모음
- ```python
# 공통 예제 데이터
players = [
{'name': 'Son', 'team': 'Tottenham', 'goals': 23, 'assists': 7},
{'name': 'Kane', 'team': 'Tottenham', 'goals': 17, 'assists': 9},
{'name': 'Salah', 'team': 'Liverpool', 'goals': 23, 'assists': 13},
{'name': 'De Bruyne', 'team': 'Man City', 'goals': 15, 'assists': 8},
{'name': 'Mane', 'team': 'Liverpool', 'goals': 16, 'assists': 2},
{'name': 'Jota', 'team': 'Liverpool', 'goals': 15, 'assists': 4},
]
```
- 이름 기준 사전순 정렬 #card
id:: 690dcc7a-cd85-428a-a734-337df0430ef6
- ```python
players.sort(key=lambda p: p['name'])
```
- 득점(goals) 기준 내림차순 정렬 #card
id:: 690dccf5-9182-401f-84c7-95f9c44d14de
- ```python
players.sort(key=lambda p: -p['goals'])
```
- 공격포인트(goals + assists) 값 기준 내림차순, 같다면 팀 이름 사전순, 팀이 같다면 선수 이름 사전순 #card
id:: 690dcd55-e279-4f3f-a75f-579d0612bfef
- ```python
players.sort(key=lambda p: (-(p['goals'] + p['assists']), p['team'], p['name']))
```
-

3
pages/Swift.md Normal file
View File

@ -0,0 +1,3 @@
deck:: Logseq/coding tip
-

View File

@ -0,0 +1,148 @@
deck:: Logseq/coding tip
- ## **► 이차원 배열(n*m) 생성**
id:: 6909ee5d-6a76-4db6-9192-4c63f0f9d9fe
- id:: 6909ee5c-3008-4d05-b2aa-98f80c7081b6
1. Array.from() 사용법 #card
- ```javascript
const arr = Array.from({length : n}, () => new Array(m).fill(0));
```
- id:: 6909ee7c-8b96-4dda-a325-3bcccca6be17
2. Array().fill() 사용법 #card
- ```javascript
const arr = new Array(n).fill().map(() => new Array(m).fill(0));
```
- ## **► 고차함수 및 매서드 정리**
- ### **◼︎ 고차함수 정의** #card
id:: 6909efa6-f92a-466d-89bb-30efd050c04a
- 다른 함수를 인자로 받거나 함수를 결과로 반환하는 함수
- 자바스크립트(타입스크립트)에서는 함수도 일급 객체로 취급하기에 가능한 결과
- ### **◼︎ 콜백함수 정의** #card
id:: 690c632e-7008-4113-b8c7-a1dae66a5449
- 고차 함수에 인자로 전달되는 함수.
- 주로 고차함수의 구체적인 동작 방식이나 조건을 정의한다.
- 고차함수의 매개변수 안에서 직접 정의되거나 혹은 화살표함수나 function키워드로 미리 선언한 뒤 함수명으로 전달되기도 한다.
- ### **◼︎ 화살표 함수**
- function 키워드 대신 => 키워드로 함수를 더 간결하게 표현하는 문법(ES6 부터 도입됨)
- 구문 : #card
id:: 690c6418-ab35-4882-a474-0b3de7ef27e0
- ```typescript
const 함수명 = (변수명1: type, 변수명2: type, ...): type => { 함수 정의 };
const 함수명 = 변수명 => { 정의 }; // 인자가 1개인 경우 소괄호 생략 가능
const 함수명 = 변수명 => 변수명 + 1 // 함수 본문이 1줄일 경우 중괄호와 return 생략 가능
```
- 특징 : #card
id:: 690c64ea-7a29-4043-854c-9b88f0da355d
- 화살표 함수는 자기만의 this를 가지지 않는다.(랙시컬 this)
- 함수의 선언 시점에서의 상위 스코프에서 this값을 물려받아서 사용한다
- 즉 일반적인 코드 본문에서 사용할 경우 this는 전역변수 그 자체 영역이 되고, 클래스 내부에서 선언될 경우 그 선언된 클래스가 this가 된다.
- 생성자로 사용할 수 없다(new 키워드 불가)
- ### **◼︎ 고차함수 종류**
- **◉ map()** #card
id:: 690c65e0-a93b-476f-b299-bdc5352e9a98
- ```javascript
Array.map(callback(element, index, array))
// element(필수) : 순회하는 현재 요소
// index(선택) : 현재 요소의 인덱스
// array(선택) : 순회중인 원본 배열
```
- 목적 : 배열의 모든 요소를 순회하며, 콜백 함수가 반환하는 결과로 새로운 배열을 생성한다.
- 반환 값 : 새로운 배열
- 원본 수정유무 : X
- **◉ filter()** #card
id:: 690c7217-8d56-48c9-a4c6-d25b9b3919d9
- ```javascript
Array.filter(callback(element, index, array))
// element(필수) : 순회하는 현재 요소
// index(선택) : 현재 요소의 인덱스
// array(선택) : 순회중인 원본 배열
```
- 콜백함수가 true를 반환하는 요소들만 모아서 새로운 배열을 생성한다.
- 반환 값 : 새로운 배열
- 원본 수정유무 : X
- **◉ every()** #card
id:: 690c7258-f134-4b47-93d3-ef1ed0b1b0cf
- ```javascript
Array.every(callback(element, index, array))
// element(필수) : 순회하는 현재 요소
// index(선택) : 현재 요소의 인덱스
// array(선택) : 순회중인 원본 배열
```
- 목적 : 모든 요소가 콜백함수의 조건을 통과하는지 확인
- 반환 값 : true(모든 요소에 대해 콜백함수가 true를 반환) / false
- 원본 수정유무 : X
- **◉ forEach()** #card
id:: 690c72b7-52f6-44b7-a984-413803266251
- ```javascript
Array.forEach(callback(element, index, array))
// element(필수) : 순회하는 현재 요소
// index(선택) : 현재 요소의 인덱스
// array(선택) : 순회중인 원본 배열
```
- 목적 : 각 요소에 대해 콜백 함수를 실행한다. (단순 반복문 대체)
- 반환 값 : undefined(항상)
- 원본 수정유무 : X
- **◉ reduce()** #card
id:: 690c7caf-1e7a-47ae-a3a8-cadadce5d00d
- ```javascript
Array.reduce(callback(accumulator, currentValue, currentIndex, array), initial value)
// accumulator(필수) : 누적자 (이전까지 누적된 결과)
// currentValue(필수) : 현재 순회하는 값
// currentIndex(선택) : 현재 순회하는 인덱스
// array(선택) : 순회중인 원본 배열
// initialValue(선택) : 누적자의 초기 값(미 입력시 배열의 첫 요소로 초기화함)
// ㄴ 이 경우에는 두번째 요소부터 순회를 한다.
```
- 목적 : 배열의 모든 요소를 순회하며 하나의 결과값으로 축약한다
- 반환 값 : 최종 누적 값(자료형 무관)
- 원본 수정유무 : X
- reduceRight()도 사용법은 동일함
- reduce() 는 첫번재 인덱스부터, reduceRight()는 마지막 인덱스부터 순회한다는 차이만 있음
- **◉ find()** #card
id:: 690c83f1-ff9a-47ed-821e-4a55c955a405
- ```javascript
Array.find(callback(element, index, array))
// element(필수) : 순회하는 현재 요소
// index(선택) : 현재 요소의 인덱스
// array(선택) : 순회중인 원본 배열
```
- 목적 : 콜백함수로 주어진 판별 조건을 만족하는 첫 번째 요소의 값을 반환한다.
- 반환 값 : 찾은 요소의 값(없을 경우 undefined)
- 원본 수정유무 : X
- findLast()도 사용법은 동일함
- find() 는 앞에서부터, findLast()는 뒤에서 부터 찾는다는 차이가 있음.
- **◉ findIndex()** #card
id:: 690c84c0-95ba-4784-a2b4-5d532d7301e5
- ```javascript
Array.find(callback(element, index, array))
// element(필수) : 순회하는 현재 요소
// index(선택) : 현재 요소의 인덱스
// array(선택) : 순회중인 원본 배열
```
- 목적 : 콜백함수로 주어진 판별 조건을 만족하는 첫 번째 요소의 인덱스를 반환한다.
- 반환 값 : 찾은 요소의 인덱스(number)(없을 경우 -1)
- 원본 수정유무 : X
- findLastIndex()도 사용법은 동일함
- findIndex() 는 앞에서부터, findLastIndex()는 뒤에서 부터 찾는다는 차이가 있음.
- **◉ sort()** #card
id:: 690c8559-e964-4d45-8def-eb1e9ec8bf8f
- ```javascript
Array.sort(compareFunction(a,b));
// comapreFunction(선택) : 정렬기준을 지정해줄 콜백함수
// a, b(선택) : 비교함수로 비교할 두 요소
```
- 목적 : 배열의 요소를 정렬한다. 정렬 순서는 콜백 함수(비교 함수)를 통해 지정할 수 있다.
- 반환 값 : 정렬된 배열의 참조를 반환. 복사본이 만들어지는 것이 아닌 원본 배열 자체가 정렬되어 참조된 반환을 함.
- 원본 수정유무 : O
- 핵심 특징 :
- 비교함수가 없을 경우, 모든 요소를 문자열로 변환하여서 그것을 기준으로 오름차순으로 정렬한다.
- 이때문에 숫자의 정렬의 경우 예기치 않은 결과가 나올 수도 있다.
- 비교함수 예시 :
- ```javascript
arr.sort((a,b) => a-b) // 오름차순
arr.sort((a,b) => b-a) // 내림차순
arr.sort((a,b) => {
if(a.name === b.name) return a.value - b.value;
return b.name - a.name;
}) // 객체의 이름순 내림차순으로 정렬하고 이름이 같을 경우 값 기준으로 오름차순으로 정렬
```

View File

@ -0,0 +1,3 @@
deck:: Logseq/coding tip
-

3
pages/자료구조.md Normal file
View File

@ -0,0 +1,3 @@
deck:: Logseq/coding tip
-

View File

@ -0,0 +1,3 @@
deck:: Logseq/coding tip
-

View File

@ -0,0 +1,8 @@
- [[javascript_typescript]]
- [[Python]]
- [[C]]
- [[Swift]]
- [[Java]]
- [[자료구조]]
- [[알고리즘 기법]]
- [[코딩 테크닉]]

View File

@ -13,18 +13,6 @@ deck:: Logseq/coding tip
# 출력
# 1 2 3 4 5
```
- **● javascript**
id:: 684e9d25-ddf8-4f7c-b781-21bb247497f8
- ```javascript
const arr = [1,2,3,4,5];
for(let i of arr) {
console.log(i);
}
// 출력
// 1 2 3 4 5
```
-
- ### **► 자바스크립트의 객체(Object) 는 파이썬의 딕셔너리(Dictionary)**
- **키(key)와 값(value)을 가지는 데이터의 집합(각각의 언어에서 서로 동일하다고 생각해도 무방함)**
@ -47,25 +35,6 @@ deck:: Logseq/coding tip
# Yechan
# 30
```
- **● javascript**
id:: 684ea0a5-0720-4a7b-a3b0-6fd81541ec05
- ```javascript
// 빈데이터 초기화 방법
let obj = {};
// 직접 선언 방법
let obj = {
"name": "Yechan",
"age" : 30
};
// 출력
console.log(obj.name);
console.log(obj["age"]);
// Yechan
// 30
// 두 방법 모두 사용 가능
```
- **◎ 키 및 값 순회(반복문 사용, 순서는 보장되지 않음)**
- **● pythron**
id:: c506e90a-c84b-4498-ba5f-5028f5a874f6
@ -87,34 +56,6 @@ deck:: Logseq/coding tip
# name Yechan
# age 30
```
- **● javascript**
id:: f380d0d7-7826-4714-bb8c-c78cc601ca50
- ```javascript
let obj = {
"name": "Yechan",
"age" : 30
};
// key 순회
for(let key in obj){
console.log(obj[key]);
}
// Yechan
// 30
// key, value 순회
for [key, value] of Object.entries(obj) {
console.log(key, value);
}
// name Yechan
// age 30
for key of Object.keys(obj) {
console.log(key, obj[key]);
}
// name Yechan
// age 30
```
-
- ### **► 파이썬에서 반복가능한 데이터셋의 값과 인덱스를 불러와서 순회하기**
- **enumerate()**
@ -154,13 +95,6 @@ deck:: Logseq/coding tip
```
-
-
- ## **C언어 변수 타입별 메모리 할당크기 정리**
- ### **빈칸 채워보기**
id:: 684ea7e1-e59d-47a5-971f-2114a17fdda7
- ![image.png](../assets/image_1749986661502_0.png)
id:: 684eae27-cd8a-4043-b999-d51b71757544
- ![image.png](../assets/image_1749986614051_0.png)
id:: 684ea656-cac9-45ba-8dc4-5ade273c8777
-
- ## **비트연산 정리**
- ### **XOR(배타적 논리합)**
@ -175,6 +109,7 @@ deck:: Logseq/coding tip
- 교환법칙, 결합법칙이 성립한다: `a ^ b = b ^ a`, `(a ^ b) ^ c = a ^ (b ^ c)`
- 활용
id:: 684eb038-f987-419b-b531-2b7a868c0842
collapsed:: true
- 중복되는 여러 수들 중에 단 하나 다른 수를 찾는 방법으로 활용
id:: 684eb045-4df8-4943-bdfb-65f983f2704e
- 모든 수를 하나하나 xor하면 결국 최종적으로 나오는 결과는 다른 하나가 나옴.
@ -198,52 +133,4 @@ deck:: Logseq/coding tip
a = a ^ b;
// 이제 a=5, b=3 (값이 서로 바뀜)
```
-
- ## **자바스크립트 특징관련 내용**
- **화살표 함수**
- 정의
id:: 685d3bc9-b9df-4cc9-be77-d6f26ee73924
- 함수를 funcion으로 따로 선언해서 사용하는 것이 아닌 한줄, 혹은 여러줄로 간결하게 표현하는 표현식의 한 형태.
- ```javascript
// 기존 함수 선언 방식
function sum(a, b) {
return a+b;
}
// 화살표 함수
const sum = (a,b) => a+b;
```
- 사용방법
id:: 685d3bec-8254-43a8-9d7a-fada78a05b6a
- 변수타입 및 함수명을 쓰고 그 뒤에 =을 붙인 뒤 변수들을 괄호로 지정한 뒤 => 기호로 연결.
- 이 후 화살표 뒤에 함수를 적으면 됨.
- 이 뒤의 함수가 한줄이면 return을 쓰지 않아도 알아서 반환함.
- 여러줄 일 경우에는 중괄호를 쓰고, 이때는 꼭 return을 써줘야 함.
- ```javascript
// 한 줄, 암시적 반환
const sum = (a, b) => a + b;
// 여러 줄, 명시적 반환 필요
const multiply = (a, b) => {
const result = a * b;
return result;
};
```
- 예시코드
- 한 줄로 표현, 입력값의 2배를 반환하는 함수 선언
id:: 685d3c87-2b8e-410e-87f6-9166619ab636
- ```javascript
const double = x => x*2;
console.log(double(10)); // 20
```
- 여러줄 표현, 두 수를 입력받아서 그 두 수를 곱한 값을 반환하는 함수 선
id:: 685d3cd9-6924-4800-a57d-61f5d37193db
- ```javascript
const multiply = (a,b) => {
const result = a*b;
return result;
};
console.log(multiply(10,5)); // 50
```
-

View File

@ -0,0 +1,80 @@
-
deck:: Logseq/coding tip
- ## **❖ 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
```
-

View File

@ -1,4 +1,5 @@
- [[🔤 영어공부]]
- [[👩🏻‍💻코딩 팁 코드 모음]]
- [[👩🏻‍💻코딩 지식_팁 정리]]
- [[👩🏻‍💻코딩 팁 코드 모음_이전이전]]
- [[👩🏻‍💻코딩 팁 코드 모음_이전]]
-