본문 바로가기

SW19

[자료구조] 트리 - 이진트리, 순회 정의트리 중에서 가장 많이 쓰이는 트리로, 모든 노드가 2개의 서브 트리를 가진다.서브트리는 공집합 일 수 있다. (공집합 또한 이진트리이다.)이진트리의 노드에는 최대 2개까지의 자식노드가 존재할 수 있고, 모든 노드의 차수가 2 이하이다. 이진트리에는 서브트리간의 순서가 존재한다. (즉 왼쪽과, 오른쪽이 구별된다) 1. 공집합이거나2. 루트와 왼쪽 서브트리, 오른쪽 서브 트리로 구성된 노드들의 유한 집합. 성질n개의 노드를 가진 이진트리는 정확히 n-1 개의 간선(edge) 를 가진다. 왜냐하면 이진트리에서 노드는 루트를 제외하면 정확히 하나의 부모노드를 가지기 때문이다. (부모와 자식간에는 1개의 edge 만이 존재한다) 높이가 h 인 이진트리의 경우, 최소 h 개의 노드를 가지며 최대 2^h -1 .. 2024. 6. 7.
[C/C++] 함수인자로써 이중포인터와 가변길이배열 지난 게시글 : https://microelectronics.tistory.com/50 [C/C++] 동적 2차원 배열과 가변길이배열(VLA)C언어의 표준에서는 고정된 크기의 배열을 선언할 때 배열의 크기를 컴파일 시간에 알 수 있어야 했다. 그렇기 때문에 C99 표준 이전에는 배열의 크기로 변수를 사용하는 것이 허용되지 않았다.microelectronics.tistory.com 이중포인터와 가변길이 2차원배열2중포인터로 동적 2차원 배열을 만들었다고 하더라도, 여전히 변수의 타입은 이중포인터다.하지만 배열과 동작원리(주소가 가리키는 메커니즘)는 같으므로, 배열을 조종하듯 값을 넣고 뺄 수 있다. (물론 2중 포인터로 동적할당 시 각 행의 첫번째 요소들이 연속된 값을 가지도록 해야 한다. 아래 코드 참고.. 2024. 5. 13.
[C++] 배열 index 관련 예외처리 [C++] 배열 index 관련 예외처리함수호출index 를 매개변수로 가지는 함수를 호출하고, 그 함수는 전달받은 index 로 배열 혹은 벡터에 접근한다고 가정해보자.만약 index 가 범위를 초과한다면 segmentation fault 에러가 발생할 것이다.  해결아래와 같이 try, catch 를 활용하여 함수에서 throw 하는 예외를 처리할 수 있다. 2024. 5. 3.
[C++] std::cin 타입 불일치 [C++] std::cin 사용 시 주의점cin 변수의 타입불일치코드를 짜다가 정수 값을 입력받을 일이 있었는데, 예상치 못한 에러가 나와서 당황했다. 아래와 같은 코드가 있다고 해보자.#include int main(){ int index; std::cout > index; std::cout > num; std::cout 올바른 정수값을 넣어 줄 경우 출력은 생각하는 대로다.만약 문자를 입력한다면 어떻게 될까두번째 입력을 받기도 전에 채워지고 이상한 값이 num 에 할당된다. 문제의 원인타입 불일치: int 변수에 문자를 입력하면, 입력 스트림은 실패 상태로 설정된다. 이 때문에 변수 index는 초기화되지 않거나 기본값인 0으로 설정된다.스트림의 실패 상태: 입력이 실패하면 스트.. 2024. 5. 2.
[C/C++] 정올 - 파스칼 삼각형 #2071 문제 파스칼 삼각형이란? 아래 과 같이 자신의 왼쪽 위의 좌표와 오른쪽 위의 좌표 값을 더해서 값을 계속 갱신해 나가는 형태의 삼각형을 말한다. 아래와 같은 파스칼 삼각형의 높이 n과 종류 m을 입력 받은 후 다음과 같은 형태의 파스칼 삼각형을 출력하는 프로그램을 작성하시오. 풀이 종류 3가지가 주어지는데, 종류 1이 종류2와 3을 풀기위한 힌트라고 본다. 먼저 n*n 의 2차원 배열을 만들고 종류 1의 파스칼 삼각형을 쉽게 만든 다음. 종류 2와 종류 3은 종류1에 기반하여 출력만 해주면 되는 것이다. (출력시에 요소의 값이 0인경우 공백을 출력한다) int arr[n][n]; memset(arr, 0 ,n*n*sizeof(int)); for ( int i = 0; i < n; i++){ arr[i][.. 2024. 4. 24.
[C/C++] 정올 - 별삼각형 #1523 #1719 #1329 문제 삼각형의 높이 n과 종류 m을 입력 받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오. 풀이 기본적으로 모두 푸는 방법은 동일한데, 행렬을 만들어서 별을 집어넣을 필요는 없다. 빈 공간은 모두 공백을 출력함으로써 해결 가능하기 때문이다. for 루프시에는 행렬처럼 0부터 시작시키는게 아니라, 1부터 시작을 시키는게 생각이 편하다. for ( int i = 1; i 2024. 4. 23.
[C/C++] 커널 드라이버에서의 함수포인터 커널 드라이버에서의 함수포인터 구조체에 함수 포인터를 사용하는 방법은 커널 드라이버나 다른 시스템 수준의 프로그래밍에서 매우 유용하게 사용된다. 이러한 방식은 다양한 기능을 동적으로 처리할 수 있게 해주며, 특히 장치 드라이버의 인터페이스를 관리할 때 흔히 볼 수 있다. 커널 드라이버에서의 사용 커널 드라이버에서는 구조체와 함수포인터를 사용하여 다양한 하드웨어 또는 가상 장치의 동작을 추상화한다. 예를 들어, Linux의 파일 시스템 또는 네트워크 장치 드라이버에서는 각각의 장치 특성에 맞게 동작을 정의할 수 있는 함수 포인터를 포함하는 구조체를 사용한다. 이러한 방식은 각 장치 또는 드라이버가 동일한 인터페이스를 공유하면서도, 내부적으로 다른 구현을 가질 수 있게 해주어 코드의 재사용성과 모듈성을 높인.. 2024. 4. 22.
[C/C++] 콜백함수의 인자로써 void 포인터 콜백함수의 인자로써 void 포인터 Intro 지난 게시글에서, 이중포인터와 void 포인터에 대해 간략하게 다뤘다. https://microelectronics.tistory.com/54 [C/C++] 이중포인터와 void 포인터 이중포인터와 void 포인터 문자열배열은 이중포인터이다 아래와 같이 문자열 배열이 있고, 해당 문자열배열의 주소를 void 포인터에 초기화시켰다고 가정해보자. char* arr[] = {"banana", "apple"}; void* vr microelectronics.tistory.com 또한 콜백함수에 대해 왜/언제 쓰는지를 알아보았다. https://microelectronics.tistory.com/46 [C/C++] 콜백함수 (Callback Function) 콜백 함.. 2024. 4. 21.
[C/C++] 이중포인터와 void 포인터 이중포인터와 void 포인터 문자열배열은 이중포인터이다 아래와 같이 문자열 배열이 있고, 해당 문자열배열의 주소를 void 포인터에 초기화시켰다고 가정해보자. char* arr[] = {"banana", "apple"}; void* vrr = arr; 여기서 다들 아는 내용을 정리해보자. 배열의 이름은 해당 배열의 첫 번째 요소의 주소를 나타내므로, arr는 &(arr[0])와 동일하다. arr는 char* 타입의 요소를 저장하는 배열이기 때문에, 이를 char** 타입으로 볼 수 있다. 즉, arr는 char* 타입의 배열의 첫 번째 요소의 주소를 가리키는 포인터이다. 포인터 변수의 크기는 64비트 시스템 기준 8바이트이다. 메모리 주소를 모두 표현해야 하기 때문이다. arr 는 문자열포인터의 배열로,.. 2024. 4. 20.