coding tip modify

This commit is contained in:
songyc macbook 2025-07-05 01:07:42 +09:00
parent 0e69a05e91
commit f644b844fc
3 changed files with 523 additions and 487 deletions

View File

@ -1,501 +1,34 @@
deck:: Logseq/coding tip
- ## **각 언어별 2차원 배열(n*m) 생성**
- **Javascript**
- id:: 684578c3-84af-4595-af7a-dc46f58bd99b
1. 한줄로 선언하기(2가지 방법) #card
- ## **Javascript / Typescript**
- ### **이차원 배열(n*m) 생성**
- id:: 6867f897-928a-4f22-8184-491fa70314db
1. Array.from() 사용법 #card
- ```javascript
const arr = Array.from({length : n}, () => new Array(m).fill(0));
```
- id:: 6867f8fc-3249-4ced-91aa-a2c951c11b0b
2. Array().fill() 사용법 #card
- ```javascript
const arr = Array.from({ length: n }, () => new Array(m).fill(0));
const arr = new Array(n).fill().map(() => new Array(m).fill(0));
```
- id:: 68457909-49bf-4cab-b5fc-c61081c0aa0c
2. 반복문으로 중첩해서 생성하기 #card
- id:: 6867f8fe-39c6-438b-a045-4f8687ad0b1d
3. 반복문 순회 #card
- ```javascript
let arr = [];
for (let i = 0; i < n; i++) {
for(int i=0; i<n; i++){
arr[i] = [];
for (let j = 0; j < m; j++) {
for(int j=0; j<m; j++){
arr[i][j] = 0;
}
}
```
- id:: 684577c9-7ecc-4ac9-a959-40f1d7593b1b
3. 값이 정해져있는 경우 #card
- ```javascript
const arr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
```
- **python**
- id:: 82ac6ae7-4155-407c-ac0a-78f00ed46c6a
1. 한줄로 선언하기 #card
- ```python
arr = [[0]*m for _ in range(n)]
```
-
- ## **배열관련 팁 모음**
- **Javascript**
- **arr.every()**
- **기본 정의** :->
id:: 68500a89-08d4-48b2-aa6b-c465041f065b
**배열의 모든 요소가 조건식을 만족하는지 확인해서 T/F를 반환하는 매서드**
```javascript
const arr = [1,2,3,4,5];
arr.every((element, index, array) => {조건식});
// element: 현재 요소
// index: 현재 인덱스 (생략 가능)
// array: 원본 배열 (생략 가능)
```
- **예제 : 배열의 모든 요소가 같은 값인지 확인하는 코드를 작성하시오.**
id:: 68500afb-beda-428b-bab7-e2dceb371325
**예시 배열은 arr1 = [5,5,5], arr2 = [5,4,5] 로 선언해서 할 것!** #card
- ```javascript
const arr1 = [5, 5, 5];
const arr2 = [5, 4, 5];
arr1.every(v => v===arr1[0]); // true
arr2.every(v => v===arr2[0]); // false
```
-
- **arr.slice()**
- **기본 정의** :->
id:: 68500c5b-9c05-4141-ab0c-3e179450bc03
**배열의 입력한 인덱스부터 끝까지의 배열을 반환하는 매서드**
**인덱스 범위를 초과해도 빈 배열을 반환하기 때문에 에러가 없음**
```javascript
const arr = [1,2,3,4,5];
arr.slice(3); // [4,5]
arr.slice(5); // []
```
-
- **arr.forEach()**
- **기본 정의** #card
id:: 68500698-1dfa-4aff-9577-359f8fe63c99
- ```javascript
const arr = [1,2,3,4,5];
arr.forEach((element, index, array) => {
// element: 현재 요소
// index: 현재 인덱스 (생략 가능)
// array: 원본 배열 (생략 가능)
// 위의 현재 요소 및 인덱스, 원본배열은 편한걸로 바꿔서 선언해도 됨.
// 위에 지정한 것을 변수삼아서 for문 안의 코드를 작성하듯 콜백함수를 선언
// 그러면 for문 처럼 각 요소들은 순회하며 코드를 실행함
});
```
- **반복문 제어 함수인 break, continue 사용법** #card
id:: 685007a1-6eab-4601-b002-6e0724e064d8
- break는 사용 불가(꼭 필요하다면 그냥 for, while, do whlie을 쓸 것!)
- continue는 return 으로 대체해서 사용함.(현재 인덱스에 대한 순회를 그즉시 끝내고 다음으로 넘어감)
- 예제
```javascript
const arr = [1,2,3,4,5];
arr.forEach(v => {
if(v===3) return;
console.log(v);
});
// 출력(개행은 생략함)
// 1 2 4 5
```
-
- **arr.reduce()**
- **기본 정의** #card
id:: 685698f1-be84-4d2a-9440-256b6831989d
- ```javascript
// arr.reduce(<콜백함수>,<누적변수의 초기값>)
arr.reduce((accumulator, currentValue, currentIndex, array)=> <함수코드>, <누적자의 초기값>)
// accumulator: 이전 요소를 상대로 콜백 함수를 실행한 결과 (누적자)
// currentValue: 현재 요소의 값
// currentIndex: 현재 요소의 인덱스 (생략가능)
// array: reduce() 메서드를 호출하는 배열 (생략가능)
```
- 배열의 각 요소별로 누적자를 계산하고 최종적으로 모든 요소를 순회한 뒤의 누적자를 리턴함.
- **예시 (1-10까지의 합을 구하기)(1-10까지 배열을 한줄로 선언한 뒤 그 배열의 합을 구하는 방식으로)** #card
id:: 68569a43-c4bc-4aaf-b07b-aeef8599a43f
- ```javascript
const arr = Array.from({length : 10}, (v,i)=> v=i+1);
const sum = arr.reduce((acc, val) => acc + val, 0);
console.log(sum); // 55
```
-
- **arr.sort()**
- arr의 데이터들을 오름차순으로 정리함. #card
id:: 68595f48-e964-47fe-9b89-9f0aa4eeed3e
- 기본적으로는 데이터들을 문자열로 보고 정렬하기 때문에 숫자가 제대로 정렬되지 않는 경우가 있음.
- 매서드 괄호 안에 콜백함수를 넣어서 숫자들을 정확하게 오름차순 혹은 내림차순으로 정렬할 수 있음.
- 오름차순 #card
id:: 68595fed-e1f0-4fb3-8c27-6650027c0749
- ```javascript
let arr = [10,5,7,2];
arr.sort((a,b)=>a-b);
console.log(arr) // 2,5,7,10
```
- 내림차순 #card
id:: 6859607c-2839-490a-9f49-8ba86607905c
- ```javascript
let arr = [10,5,7,2];
arr.sort((a,b)=>b-a);
console.log(arr) // 10,7,5,2
```
- **python**
- **arr.count(value)** #card
id:: 6857c84c-711b-4865-ba82-92c2d81c0e0b
- 리스트 혹은 문자열에서 특정 값의 개수를 리턴하는 매서드
- ```python
string = "aaabbcccc"
print(string.count('a')) # 3
print(string.count('b')) # 2
print(string.count('c')) # 4
arr = [1,2,2,3,3,3,4,4,4,4]
print(arr.count(1)) # 1
print(arr.count(2)) # 2
print(arr.count(3)) # 3
print(arr.count(4)) # 4
```
- **arr.sort()** #card #depth-1
id:: 685960df-7858-4413-b448-1b34facec439
- 리스트를 정렬하는 매서드.
- 리스트를 정렬해서 기존 리스트를 정렬된 형태로 바꿈.
- arr.sort(reverse=True) 이렇게 하면 내림차순으로 정렬됨.
- 예제코드 #card
id:: 685961bd-0be6-49ff-9a07-f5b2eb371030
- ```python
arr = [5,8,2,4,9]
arr.sort() # 2 4 5 8 9
arr.sort(reverse=True) # 9 8 5 4 2
```
- **sorted(arr)** #card #depth-1
id:: 6859617a-f536-4f57-9cfd-6e4291369c1a
- 입력한 리스트를 정렬해서 새로운 리스트를 반환하는 함수
- 기본적으로는 오름차순정렬이고, sorted(arr, reverse=True) 로 하면 내림차순임.
- 예제코드 #card
id:: 68596251-f733-4854-902e-faf055a64330
- ```python
arr = [5,8,2,4,9]
arr1 = sorted(arr)
arr2 = sorted(arr, reverse=True)
print(arr1) # 2 4 5 8 9
print(arr2) # 9 8 5 4 2
```
-
-
- ## **진수변환 알고리즘**
- **B진수 숫자 N을 10진수로 바꾸는 법(누적곱 방식)** #card
id:: 68458948-9821-42c7-bb19-85d7c7ad4b8d
- N의 왼쪽부터 한 자리씩 누적해서 곱하고 더하는 방식
- 알고리즘
- 최종결과 res를 0으로 초기화
- 반복문을 통해 N의 왼쪽숫자부터 하나씩 순회함.
- 순회하면서 읽은 값을 10진수로 바꾸고(A=10, B=11...) 그 값은 val에 저장.
- res = res*B + val
- 반복문을 모두 돌고 나면 최종적으로 res에 변환값이 들어가있음.
- **10진수 숫자 N을 B진수로 바꾸는 법(나머지 계산법)** #card
id:: 68458b0d-5584-48bf-8bb4-aad6449b0193
- N을 B로 계속 나누면서 그때마다 나머지값을 통해 변환하는 방식
- 알고리즘
- 최종 결과 문자열 res를 선언.
- N이 0이 될 때까지 반복문을 순회함.
- val에 N을 B로 나눈 나머지 값을 저장.
- val값을 진법에 맞게 변환해서 res에 넣음.(앞에서 부터 넣는다)
- N을 B로 나눈 몫으로 N을 재선언(N=N//B)
- 위의 과정을 반복한 뒤 반복문을 빠져나오면 res에는 최종 변환결과가 역순으로 들어가있음.
-
- ## **소수점 올림 연산**
- **ceil함수를 사용하지 않는 방법** #card
id:: 68494b21-76da-4013-a61a-8c8cd812e253
- ## **Python**
- ### **이차원 배열(n*m) 생성** #card
id:: 6867f994-13d0-4937-90e9-d8aec7be5d67
- ```python
ceil(x/y) = (x+y-1)//y
arr = [[0]*m for _ in range(n)]
```
-
- ## **최소공배수/최대공약수 구하기 (유클리드 호제법)**
- **최대공약수(GCD) 구하기** #card #depth-1
id:: 685d3d73-9ff0-4ec5-88b0-913cc9d52da5
- 두 수 a,b가 있을 때, a를 b로 나눈 나머지를 r이라 하면 a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
- 즉 위의 과정을 계속 반복해서 나머지가 0이 될 때까지 반복하면 0이되기 직전의 수가 최대 공약수가 된다.
- 이것은 반복문으로, 또는 재귀함수로 구할 수 있다.
- 예제코드(파이썬 기준)
- 재귀함수로 구현 #card
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
```
- 반복문으로 구현 #card
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의 최소공배수는 다음과 같다. #card
id:: 685d41ca-1832-434c-a919-0f67a2a37ec0
- LCM = (a*b) / GCD(a,b)
-
- ## **파이썬, 자바스크립트 반복문 순회 및 객체/딕셔너리 순회**
- ### **► 일반적인 반복가능 객체를 활용한 반복문 순회(기본 순회)**
- **● pythron** #card
id:: 684e9cfd-e828-43ac-9f6c-76492bdcf94a
- ```python
arr = [1,2,3,4,5]
for i in arr :
print(i)
# 출력
# 1 2 3 4 5
```
- **● javascript** #card
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)을 가지는 데이터의 집합(각각의 언어에서 서로 동일하다고 생각해도 무방함)**
- **◎ 선언 및 접근방법**
- **● pythron** #card
id:: 684e9fb3-3cf0-4fa0-8539-e53bfe7fbcc1
- ```python
# 빈데이터 초기화 방법
dic = {} # dict()
# 직접 선언 방법
dic = {
"name": "Yechan",
"age" : 30
}
# 출력
print(dic["name"])
print(dic["age"])
# Yechan
# 30
```
- **● javascript** #card
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** #card
id:: c506e90a-c84b-4498-ba5f-5028f5a874f6
- ```python
dic = {
"name": "Yechan",
"age" : 30
}
# key 순회
for key in dic :
print(dic[key])
# Yechan
# 30
# key, value 순회
for key, value in dic.items() :
print(key, value)
# name Yechan
# age 30
```
- **● javascript** #card
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()** #card #depth-1
id:: 6857c511-ce76-4075-ba45-a38956deb7df
- 반복가능한 데이터셋의 값과 인덱스를 튜플형태로 반환하는 함수 #card
id:: 6857c541-93f0-441f-8ff1-ca3cf8a3b186
- ```python
arr = ["apple", "banana", "cat"]
for i in enumerate(arr) :
print(i)
# 출력
# (0, apple)
# (1, banana)
# (2, cat)
```
- 반복문에서 인덱스와 값을 동시에 순회할 수 있음. #card
id:: 6857c6b6-3201-47a1-a090-c0ebe75d5e4c
- ```python
arr = ["apple", "banana", "cat"]
for index, value in enumerate(arr) :
print(index, value)
# 출력
# 0 apple
# 1 banana
# 2 cat
```
- 시작 인덱스를 바꿀 수도 있음. #card
id:: 6857c623-b8e4-4325-a8c2-27a9446118bd
- ```python
arr = ["apple", "banana", "cat"]
for index, value in enumerate(arr, start=1) :
print(index, value)
# 출력
# 1 apple
# 2 banana
# 3 cat
```
-
-
- ## **C언어 변수 타입별 메모리 할당크기 정리**
- ### **빈칸 채워보기**
id:: 684ea7e1-e59d-47a5-971f-2114a17fdda7
- ![image.png](../assets/image_1749986661502_0.png) #card
id:: 684eae27-cd8a-4043-b999-d51b71757544
- ![image.png](../assets/image_1749986614051_0.png)
id:: 684ea656-cac9-45ba-8dc4-5ade273c8777
-
- ## **비트연산 정리**
- ### **XOR(배타적 논리합)**
- 기호 : :-> ^
id:: 684eaf61-54bb-4f69-af87-f75f280bd119
- 연산값 : :-> (0,0)->0, (0,1)->1, (1,0)->1, (1,1)->0 [같으면 0, 다르면 1]
id:: 684eafb2-7091-4d69-8c3f-0540d687b782
- 핵심성질 #card
id:: 684eaff6-5a2b-4cdd-ba5d-cba163b087fa
- 같은 값끼리 XOR하면 0이 된다: `a ^ a = 0`
- 0과 XOR하면 자기 자신이 된다: `a ^ 0 = a`
- 교환법칙, 결합법칙이 성립한다: `a ^ b = b ^ a`, `(a ^ b) ^ c = a ^ (b ^ c)`
- 활용 #card #depth-1
id:: 684eb038-f987-419b-b531-2b7a868c0842
- 중복되는 여러 수들 중에 단 하나 다른 수를 찾는 방법으로 활용 #card
id:: 684eb045-4df8-4943-bdfb-65f983f2704e
- 모든 수를 하나하나 xor하면 결국 최종적으로 나오는 결과는 다른 하나가 나옴.
- ```C
int arr[] = {1, 2, 3, 2, 1};
int res = 0;
for(int i=0; i<5; i++) res ^= arr[i];
// res == 3 (짝이 없는 값)
```
- 중복되는 수가 홀수개로 짝지어져 있으면 사용할 수 없음
- 단 단 하나의 수를 제외한 모든 수가 같은 숫자라면 사용 가능
- 임시변수 없이 두 변수의 값을 swap #card
id:: 684eb1a1-f13d-45c3-b03b-da9372da5e7c
- XOR 연산의 성질을 잘 응용하면 아래의 코드처럼 두 변수를 교환할 수 있음.
- ```C
int a = 3;
int b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
// 이제 a=5, b=3 (값이 서로 바뀜)
```
-
- ## **자바스크립트 특징관련 내용**
- **화살표 함수**
- 정의 #card
id:: 685d3bc9-b9df-4cc9-be77-d6f26ee73924
- 함수를 funcion으로 따로 선언해서 사용하는 것이 아닌 한줄, 혹은 여러줄로 간결하게 표현하는 표현식의 한 형태.
- ```javascript
// 기존 함수 선언 방식
function sum(a, b) {
return a+b;
}
// 화살표 함수
const sum = (a,b) => a+b;
```
- 사용방법 #card
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배를 반환하는 함수 선언 #card
id:: 685d3c87-2b8e-410e-87f6-9166619ab636
- ```javascript
const double = x => x*2;
console.log(double(10)); // 20
```
- 여러줄 표현, 두 수를 입력받아서 그 두 수를 곱한 값을 반환하는 함수 선언 #card
id:: 685d3cd9-6924-4800-a57d-61f5d37193db
- ```javascript
const multiply = (a,b) => {
const result = a*b;
return result;
};
console.log(multiply(10,5)); // 50
```
- ## **C**
- ## **Java**
- ## **프로그래밍 관련 이론 정리**

View File

@ -0,0 +1,502 @@
deck:: Logseq/coding tip
- ## **각 언어별 2차원 배열(n*m) 생성**
- **Javascript**
- id:: 684578c3-84af-4595-af7a-dc46f58bd99b
1. 한줄로 선언하기(2가지 방법)
- ```javascript
const arr = Array.from({ length: n }, () => new Array(m).fill(0));
const arr = new Array(n).fill().map(() => new Array(m).fill(0));
```
- id:: 68457909-49bf-4cab-b5fc-c61081c0aa0c
2. 반복문으로 중첩해서 생성하기
- ```javascript
let arr = [];
for (let i = 0; i < n; i++) {
arr[i] = [];
for (let j = 0; j < m; j++) {
arr[i][j] = 0;
}
}
```
- id:: 684577c9-7ecc-4ac9-a959-40f1d7593b1b
3. 값이 정해져있는 경우
- ```javascript
const arr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
```
- **python**
- id:: 82ac6ae7-4155-407c-ac0a-78f00ed46c6a
1. 한줄로 선언하기
- ```python
arr = [[0]*m for _ in range(n)]
```
-
- ## **배열관련 팁 모음**
- **Javascript**
- **arr.every()**
- **기본 정의**
id:: 68500a89-08d4-48b2-aa6b-c465041f065b
**배열의 모든 요소가 조건식을 만족하는지 확인해서 T/F를 반환하는 매서드**
```javascript
const arr = [1,2,3,4,5];
arr.every((element, index, array) => {조건식});
// element: 현재 요소
// index: 현재 인덱스 (생략 가능)
// array: 원본 배열 (생략 가능)
```
- **예제 : 배열의 모든 요소가 같은 값인지 확인하는 코드를 작성하시오.**
id:: 68500afb-beda-428b-bab7-e2dceb371325
collapsed:: true
**예시 배열은 arr1 = [5,5,5], arr2 = [5,4,5] 로 선언해서 할 것!**
- ```javascript
const arr1 = [5, 5, 5];
const arr2 = [5, 4, 5];
arr1.every(v => v===arr1[0]); // true
arr2.every(v => v===arr2[0]); // false
```
-
- **arr.slice()**
- **기본 정의**
id:: 68500c5b-9c05-4141-ab0c-3e179450bc03
**배열의 입력한 인덱스부터 끝까지의 배열을 반환하는 매서드**
**인덱스 범위를 초과해도 빈 배열을 반환하기 때문에 에러가 없음**
```javascript
const arr = [1,2,3,4,5];
arr.slice(3); // [4,5]
arr.slice(5); // []
```
-
- **arr.forEach()**
- **기본 정의**
id:: 68500698-1dfa-4aff-9577-359f8fe63c99
- ```javascript
const arr = [1,2,3,4,5];
arr.forEach((element, index, array) => {
// element: 현재 요소
// index: 현재 인덱스 (생략 가능)
// array: 원본 배열 (생략 가능)
// 위의 현재 요소 및 인덱스, 원본배열은 편한걸로 바꿔서 선언해도 됨.
// 위에 지정한 것을 변수삼아서 for문 안의 코드를 작성하듯 콜백함수를 선언
// 그러면 for문 처럼 각 요소들은 순회하며 코드를 실행함
});
```
- **반복문 제어 함수인 break, continue 사용법**
id:: 685007a1-6eab-4601-b002-6e0724e064d8
- break는 사용 불가(꼭 필요하다면 그냥 for, while, do whlie을 쓸 것!)
- continue는 return 으로 대체해서 사용함.(현재 인덱스에 대한 순회를 그즉시 끝내고 다음으로 넘어감)
- 예제
```javascript
const arr = [1,2,3,4,5];
arr.forEach(v => {
if(v===3) return;
console.log(v);
});
// 출력(개행은 생략함)
// 1 2 4 5
```
-
- **arr.reduce()**
- **기본 정의**
id:: 685698f1-be84-4d2a-9440-256b6831989d
- ```javascript
// arr.reduce(<콜백함수>,<누적변수의 초기값>)
arr.reduce((accumulator, currentValue, currentIndex, array)=> <함수코드>, <누적자의 초기값>)
// accumulator: 이전 요소를 상대로 콜백 함수를 실행한 결과 (누적자)
// currentValue: 현재 요소의 값
// currentIndex: 현재 요소의 인덱스 (생략가능)
// array: reduce() 메서드를 호출하는 배열 (생략가능)
```
- 배열의 각 요소별로 누적자를 계산하고 최종적으로 모든 요소를 순회한 뒤의 누적자를 리턴함.
- **예시 (1-10까지의 합을 구하기)(1-10까지 배열을 한줄로 선언한 뒤 그 배열의 합을 구하는 방식으로)**
id:: 68569a43-c4bc-4aaf-b07b-aeef8599a43f
- ```javascript
const arr = Array.from({length : 10}, (v,i)=> v=i+1);
const sum = arr.reduce((acc, val) => acc + val, 0);
console.log(sum); // 55
```
-
- **arr.sort()**
- arr의 데이터들을 오름차순으로 정리함.
id:: 68595f48-e964-47fe-9b89-9f0aa4eeed3e
- 기본적으로는 데이터들을 문자열로 보고 정렬하기 때문에 숫자가 제대로 정렬되지 않는 경우가 있음.
- 매서드 괄호 안에 콜백함수를 넣어서 숫자들을 정확하게 오름차순 혹은 내림차순으로 정렬할 수 있음.
- 오름차순
id:: 68595fed-e1f0-4fb3-8c27-6650027c0749
- ```javascript
let arr = [10,5,7,2];
arr.sort((a,b)=>a-b);
console.log(arr) // 2,5,7,10
```
- 내림차순
id:: 6859607c-2839-490a-9f49-8ba86607905c
- ```javascript
let arr = [10,5,7,2];
arr.sort((a,b)=>b-a);
console.log(arr) // 10,7,5,2
```
- **python**
- **arr.count(value)**
id:: 6857c84c-711b-4865-ba82-92c2d81c0e0b
- 리스트 혹은 문자열에서 특정 값의 개수를 리턴하는 매서드
- ```python
string = "aaabbcccc"
print(string.count('a')) # 3
print(string.count('b')) # 2
print(string.count('c')) # 4
arr = [1,2,2,3,3,3,4,4,4,4]
print(arr.count(1)) # 1
print(arr.count(2)) # 2
print(arr.count(3)) # 3
print(arr.count(4)) # 4
```
- **arr.sort()**-1
id:: 685960df-7858-4413-b448-1b34facec439
- 리스트를 정렬하는 매서드.
- 리스트를 정렬해서 기존 리스트를 정렬된 형태로 바꿈.
- arr.sort(reverse=True) 이렇게 하면 내림차순으로 정렬됨.
- 예제코드
id:: 685961bd-0be6-49ff-9a07-f5b2eb371030
- ```python
arr = [5,8,2,4,9]
arr.sort() # 2 4 5 8 9
arr.sort(reverse=True) # 9 8 5 4 2
```
- **sorted(arr)**
id:: 6859617a-f536-4f57-9cfd-6e4291369c1a
- 입력한 리스트를 정렬해서 새로운 리스트를 반환하는 함수
- 기본적으로는 오름차순정렬이고, sorted(arr, reverse=True) 로 하면 내림차순임.
- 예제코드
id:: 68596251-f733-4854-902e-faf055a64330
- ```python
arr = [5,8,2,4,9]
arr1 = sorted(arr)
arr2 = sorted(arr, reverse=True)
print(arr1) # 2 4 5 8 9
print(arr2) # 9 8 5 4 2
```
-
-
- ## **진수변환 알고리즘**
- **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**
id:: 684e9cfd-e828-43ac-9f6c-76492bdcf94a
- ```python
arr = [1,2,3,4,5]
for i in arr :
print(i)
# 출력
# 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)을 가지는 데이터의 집합(각각의 언어에서 서로 동일하다고 생각해도 무방함)**
- **◎ 선언 및 접근방법**
- **● pythron**
id:: 684e9fb3-3cf0-4fa0-8539-e53bfe7fbcc1
- ```python
# 빈데이터 초기화 방법
dic = {} # dict()
# 직접 선언 방법
dic = {
"name": "Yechan",
"age" : 30
}
# 출력
print(dic["name"])
print(dic["age"])
# 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
- ```python
dic = {
"name": "Yechan",
"age" : 30
}
# key 순회
for key in dic :
print(dic[key])
# Yechan
# 30
# key, value 순회
for key, value in dic.items() :
print(key, value)
# 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()**
id:: 6857c511-ce76-4075-ba45-a38956deb7df
- 반복가능한 데이터셋의 값과 인덱스를 튜플형태로 반환하는 함수
id:: 6857c541-93f0-441f-8ff1-ca3cf8a3b186
- ```python
arr = ["apple", "banana", "cat"]
for i in enumerate(arr) :
print(i)
# 출력
# (0, apple)
# (1, banana)
# (2, cat)
```
- 반복문에서 인덱스와 값을 동시에 순회할 수 있음.
id:: 6857c6b6-3201-47a1-a090-c0ebe75d5e4c
- ```python
arr = ["apple", "banana", "cat"]
for index, value in enumerate(arr) :
print(index, value)
# 출력
# 0 apple
# 1 banana
# 2 cat
```
- 시작 인덱스를 바꿀 수도 있음.
id:: 6857c623-b8e4-4325-a8c2-27a9446118bd
- ```python
arr = ["apple", "banana", "cat"]
for index, value in enumerate(arr, start=1) :
print(index, value)
# 출력
# 1 apple
# 2 banana
# 3 cat
```
-
-
- ## **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(배타적 논리합)**
- 기호 : ^
id:: 684eaf61-54bb-4f69-af87-f75f280bd119
- 연산값 : (0,0)->0, (0,1)->1, (1,0)->1, (1,1)->0 [같으면 0, 다르면 1]
id:: 684eafb2-7091-4d69-8c3f-0540d687b782
- 핵심성질
id:: 684eaff6-5a2b-4cdd-ba5d-cba163b087fa
- 같은 값끼리 XOR하면 0이 된다: `a ^ a = 0`
- 0과 XOR하면 자기 자신이 된다: `a ^ 0 = a`
- 교환법칙, 결합법칙이 성립한다: `a ^ b = b ^ a`, `(a ^ b) ^ c = a ^ (b ^ c)`
- 활용
id:: 684eb038-f987-419b-b531-2b7a868c0842
- 중복되는 여러 수들 중에 단 하나 다른 수를 찾는 방법으로 활용
id:: 684eb045-4df8-4943-bdfb-65f983f2704e
- 모든 수를 하나하나 xor하면 결국 최종적으로 나오는 결과는 다른 하나가 나옴.
- ```C
int arr[] = {1, 2, 3, 2, 1};
int res = 0;
for(int i=0; i<5; i++) res ^= arr[i];
// res == 3 (짝이 없는 값)
```
- 중복되는 수가 홀수개로 짝지어져 있으면 사용할 수 없음
- 단 단 하나의 수를 제외한 모든 수가 같은 숫자라면 사용 가능
- 임시변수 없이 두 변수의 값을 swap
id:: 684eb1a1-f13d-45c3-b03b-da9372da5e7c
- XOR 연산의 성질을 잘 응용하면 아래의 코드처럼 두 변수를 교환할 수 있음.
- ```C
int a = 3;
int b = 5;
a = a ^ b;
b = a ^ b;
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

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