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** 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 ```