함수포인터 C 언어에서 함수 포인터(Function Pointer)는 함수를 가리키는 포인터 변수입니다. 다시 말하면, 함수 포인터는 메모리에서 특정 함수의 주소를 저장할 수 있고, 해당 주소를 사용하여 함수를 호출할 수 있게 해 줍니다. 이를 통해 함수를 다른 함수의 인수로 전달하거나, 함수를 동적으로 선택하여 실행할 수 있게 됩니다. 함수 포인터의 선언 방법은 다음과 같습니다: 반환_자료형 (*포인터_변수_이름)(매개변수_자료형1, 매개변수_자료형2, ...); 여기서 반환_자료형은 해당 함수의 반환하는 자료형, 매개변수_자료형1, 매개변수_자료형 2,... 는 해당 함수의 매개변수 자료형들을 나타냅니다. 예를 들어, int를 반환하고 int 매개변수를 한 개 가지는 함수를 가리키는 함수 포인터의 선..
동생의 추천으로 방문한 우도의 로뎀 가든 후기입니다. 제주도 우도에 위치한 로뎀가든이다. 같이간 지인의 추천으로 방문한 곳인데 한라산 볶음밥을 최초로 시작했다는 식당이다. 오래된 식당이라 그런지 내부는 그렇게 깔끔하진 않다. 예전에는 줄서서 먹을 정도였다는데 가게는 한산했다. 한치, 흑돼지 주물럭 자체는 어디에서나 먹을 수 있는 흔한 맛이었으며, 가격이 다소 비싸다는 생각이 든다. 다만 한라산 볶음밥 자체는 원조라는 격에 맞게 특이하고 맛있고 재밌는 경험이었다. 가게 사장님으로 보이는 남자 직원분이 직접 제주도의 역사와 함게 설명을 해주시는데, 어느 테이블이건 똑같은 말을 계속 반복해서 해주시는걸 보면 매우 숙달되신 것 같다. 각 계절에 맞게 들어가는 재료를 다르게 볶아 주신다. 좋은 경험은 맞지만 뭔가..
제주시 구좌읍 삼도이동 165-1번지 에 위치한 혼바띠국수 이다. 외관과 메뉴판 혼바띠국수는 제주시에 위치한 국수집으로, 비빔국수와 고기국수가 인기가 있습니다. 주차는 근처 골목에 주차하면된다. 혼바띠 국수 식당에는 곱빼기가 무료로 제공되어 양 많은 분들에게 좋은 곳일 것 같다. 비빔국수는 직접 만든 새콤달콤한 양념장에 5가지 야채를 넣어 저희가 직접 면을 버무려 나가는것이 특징이다. 괴국수는 사골을 12시간 이상 푹 고아서 진한 국물에 고명으로 목이버섯이 들어가는 것이 특징이다.
| Substring, Subarray Substring 은 부분 문자열이란 뜻이다. Substring이 Subsequence와 구분되는 가장 중요한 특징은 어떤 문자열 S의 Substring은 연속적이어야 한다는 것이다. Subarray와의 차이점은 단지 문자열인지 배열인지 이다. Ex) 문자열 apple의 전체 Substring apple, appl, pple, app, ppl, ple, ap, pp, pl, le, a, p, l, e, '' | Subsequence Subsequence의 가장 큰 특징은 1. 순서를 유지해야 한다 와 2. 반드시 연속적일 필요는 없다 이다. Subsequence는 Array와 String에 모두 적용되는 개념으로 Substring과 구분 지어서 기억해놓아야 한다. ..
| Merge Sort 병합 정렬 혹은 합병 정렬이라고도 하는 Merge Sort는 시간 복잡도가 O(nlogn)인 비교 기반의 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 같은 값일 때 그 순서가 유지되는 안정 정렬에 속한다. 분할 정복 알고리즘의 일종이며, 존 폰 노이만이 1945년에 개발하였다. Merge Sort의 가장 큰 특징은, 임시로 정렬된 부분을 저장할 별도의 공간 n이 필요하다는 점과, 안정 정렬이라는 점이다. 이는 특정 문제를 해결할 때 아주 중요한 포인트가 될 것이다. | 병합 정렬의 구현 병합 정렬은 대부분 Recursive하게 구현하는 것이 이해하기도 쉽고 간단하다. Recursive Style 1 const int LM = 100005; int arr[LM], t..
이 카테고리에서는 단순히 수학적 공식 혹은 지식을 깊게 다루진 않는다. 프로그래밍과 연관 지어서 유용하게 사용할 수 있는 수학적 지식을 다룬다. | Honor's Method 호너의 방법, 호너 메서드, 호너의 법칙 이라고도 하는 Honor's Method는 영국의 수학자인 윌리엄 조지 호너의 이름을 따서 지어진 다항식을 표현하는 방법이다. 위와 같은 다항식이 있을 때 이를 Honor's Method로 표현하면 아래와 같다. Honor's Method로 표현한 위의 다항식을 살펴보면 단순히 x로 묶은 것 그 이상 그 이하도 아니다. 하지만 이를 프로그래밍에서 활용하면 계산량을 많이 줄일 수 있다. 예를 들어 아래와 같은 다항식이 있다고 하자. 이를 단순하게 프로그래밍 한다면 x의 n승을 구하는데 5 + ..
대부분의 PS 문제를 해결할 때에는 보통 메모리 제한보다는 성능을 더 고려한다. 처음부터 메모리가 넉넉하게 주어지며, 사실 기술이 많이 발전한 지금 메모리를 극한으로 제한하는 것은 어불성설인 것 같기도 하다. 하지만 PS 문제에서 메모리를 제한할 때, 알아두면 좋을 방법이니 포스팅해보도록 한다. | 사용되지 않는 비트의 예시 1. 입력 값으로 주어진 수의 범위가 제한적일 때 예를 들어, 특정 문자열이 주어지고, 그 문자열의 길이를 저장해야 할 때 보통 int len = str.length(); 이런 식으로 사용하곤 하는데. 만약 주어진 문자열의 길이가 8 이하라면? 100 이하라면? 위의 Integer type변수 len의 앞쪽 비트는 전혀 사용되지 않는다. 다시말해 만약 문자열의 길이가 8 이하라면, ..
| O(n) 정렬 비교 정렬의 하한은 O(nlogn)이지만 입력된 자료의 원소가 제한적인 성질을 만족하는 경우 O(n) 정렬이 가능하다. 대표적인 O(n) 정렬의 알고리즘으로는 Counting Sort와 Radix Sort가 있다. | Radix Sort Radix Sort 또한 자료의 원소가 제한적인 성질을 만족하는 경우 사용 가능한 O(n) 정렬 방법이다. 원소의 자릿수가 d자리 이하인 N개의 수들로 이루어진 경우 O(d * N)의 시간 복잡도를 갖는 정렬방법이다. 소개할 Radix Sort 구현 방법은 Counting Sort를 활용하는 방법이다. 낮은 자리부터 정렬을 하고 정렬된 순서를 유지하면서 보다 높은 자리를 정렬하는 과정에서 Counting Sort가 활용된다. 따라서 개수를 셀(Count..
| O(n) 정렬 비교 정렬의 하한은 O(nlogn)이지만 입력된 자료의 원소가 제한적인 성질을 만족하는 경우 O(n) 정렬이 가능하다. 대표적인 O(n) 정렬의 알고리즘으로는 Counting Sort와 Radix Sort가 있다. | Counting Sort 일반적으로 정수 또는 문자를 정렬하는 경우 많이 사용되는 방법으로, 원소의 범위가 제한적일 때 원소의 개수를 세어 정렬하는 방법이다. 개수를 셀 배열과 정렬된 결과가 저장될 배열이 추가로 필요하다. 다양한 구현 방법이 있지만, Radix Sort와 연관된 버전으로 알아보자. 기본 구현 방법은 아래와 같다. 1. 각 원소의 개수를 저장할 count 배열을 준비한다. 2. 정렬한 배열에 대하여 각 원소의 개수를 세어 count 배열에 저장한다. int..
| 가상 함수 객체 지향 프로그래밍에서 가상 함수(virtual function 또는 virtual method)는 상속하는 클래스 내에서 같은 시그니처 함수로 오버 라이딩될 수 있는 함수 또는 메서드이다. 가상 함수에 관련된 내용은 아래 링크를 참조한다. https://coding-factory.tistory.com/699 | 가상 함수는 'vtable' 혹은 가상 테이블(virtual table)에 의존한다. 어떤 클래스의 함수가 virtual로 선언되어 있으면, 해당 클래스의 가상 함수 주소를 보관하는 vtable이 만들어진다. 컴파일러는 또한 해당 클래스의 vtable을 가리키는 vptr이라는 숨겨진 변수(hidden variable)를 해당 클래스에 추가한다. 하위 클래스가 상위 클래스의 가상 ..
| Hash Table 해시 테이블의 값(value)은 키(key)에 대한 해시 함수를 호출하여 저장한다. 값은 정렬된 순서로 보관되지 않는다. 삽입 및 탐색 연산은 분할상환적으로 O(1) 시간에 수행된다. (충돌이 적다는 가정하에) 잠재적 충돌을 고려하여 구현해야 한다. 보통은 충돌되는 값을 서로 연결하여(chaining)하여 이 문제를 해결한다. 즉, 특정 키에 대응되는 인덱스 위치에 모든 값을 연결 리스트로 묶는다. | STL map 키를 기준으로 만든 이진 탐색 트리에 키(key) / 값(value) 쌍을 보관한다. 충돌을 처리할 필요가 없고 트리의 균형이 유지되므로 삽입 및 탐색 시간은 O(logN)이 보장된다. key를 기준으로 정렬된 상태로 저장한다. 물론, 정렬하지 않은 상태로 저장하는 u..
| Question If a canoe can hold 2 kids and a max weight of 150 lbs, write a function that returns the minimum number of canoes needed, given a list of kids and their weights. 번역 : 하나의 카누에는 2명의 아이를 탑승시킬 수 있고, 카누의 최대하중은 150 lbs이다. 아이들의 무게를 나타내는 list가 주어질 때 필요한 카누의 수가 최소가 되는 함수를 작성하라. | Solution 문제를 풀 때 고려한 사항 아이들이 0명일 때 알고리즘이 정상 동작해야 한다. 아이들의 무게는 lsb단위로 주어진다고 가정한다. 아이들이 홀 수 일 때와 짝수일 때 모두 함수가 정상 동작해..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 일곱 번째 순서는 Hash Table이다. hash table은 각 data값이 key를 가지고 있는 자료구조이다. 우리가 특정 키로 특정 자물쇠를 바로 여는 것과 비슷한 자료구조이다. 키만 가지고 있다면 별도의 탐색과정 없이 효율적으로 데이터를 찾을 수 있고 이는 데이터의 크기에 관계없이 삽입 및 검색에 매우 효율적이다. 사실 배열도 일종의 hash라고 볼 수 있다. 각 인덱스에 대칭되는 값들을 배열이 가지고 있다. 그렇다면 배열이 있는데 우리는 왜 별도의 hash라는 것을 사용할까? 일반적으로 배열에서 사..
본 포스팅 시리즈에서는 모든 프로그래머들이 반드시 알아야 할 가장 기본적인 자료구조를 다룰 예정이다. 앞으로 다룰 내용은 프로그래머에게 기본 소양이며, 본인 스스로 직접 구현할 수 있어야 한다. | 여섯 번째 순서는 힙이다. heap이란 완전 이진트리의 일종으로 부모 노드와 자식 노드 간에 항상 대소 관계가 성립하는 자료구조이다. 부모의 노드가 자식 노드보다 크다면 Max Heap, 작다면 Min Heap이라고 한다. 이때 부모 노드와 자식 노드 간에 관계만 존재할 뿐 형제 노드 사이에는 아무런 관계가 없다. 위에서 말한 대소관계 이외에도 따로 우선순위를 위한 정의가 가능하며, 그러한 자료구조를 우선순위 큐라고도 한다. 힙은 보통 힙정렬 알고리즘, 우선순위 큐의 구현 등에 사용된다. 항상 최솟값 혹은 최..
- Total
- Today
- Yesterday
- C++
- 속초 맛집
- Medium
- 반드시 알아야 할 자료구조
- 내돈내산
- 알고리즘
- 트리
- 코딩인터뷰
- DP
- algorithm
- ProblemSolving
- 러스트 배우기
- LeetCode
- 러스트 입문
- coding interview
- rust
- 기술면접
- PS
- 자료구조
- 속초
- interview question
- Interview
- 인터뷰
- 리트코드
- Tree
- 맛집
- 러스트 기초
- 솔직후기
- 러스트
- Problem Solving
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |