Study_Cat

꾸준히 공부하는 고양이가 될게요.

끊임없는 노력은 천재를 이긴다.

코딩/C, C++ 7

[자료구조] Generic Dynamic Array 구현하기 ( 포인터 활용하기 )

이번에 구현해볼 것은, logN 만에 id를 찾아서 값을 update 하는 동적 Array입니다. linked_list 가 아니라 Array이기에 삽입, 삭제에 있어 O(N) 의 시간복잡도로 비효율적이라 사용하진 않지만 pointer 활용에 이해를 돕고자 구현해봤습니다.   또한 자료구조 수업에서 첫 번째 과제로 많이 나오는 내용이므로 코드를 활용하셔도 됩니다. 단, 댓글로 사용한다고만 남겨주시면 됩니다. valgrind 로 확인을 걸쳤으니 아마 문제는 없을겁니다. 아래 포스팅에서 비슷한 구조를 설명했기에 이번 포스팅에서는 디테일하게 설명하지는 않을 것 같습니다.  [자료구조] Ordered Linked List 구현하기만약 아래 소스코드를 사용한다면(과제나 블로그) 댓글로 목적을 적어주시고 사용해주세요..

코딩/C, C++ 2024.10.20

[자료구조] Ordered Linked List 구현하기

만약 아래 소스코드를 사용한다면(과제나 블로그) 댓글로 목적을 적어주시고 사용해주세요. 대학생분들이 사용하기 좋게 최대한 void ptr을 사용했으며 valgrind로 메모리 누수가 없음을 확인했습니다. 포인터에 대해 잘 모르신다면 아래 포스팅을 참고해주세요! [자료구조] 포인터와 동적 할당, 자료구조 입문하기! (with c언어)시작하기 앞서 자료구조 포스팅은 c++이 아닌 c언어로 진행됩니다! c언어는 c++과 달리 new, delete, struct 생성자/소멸자, template 없기에 불편할 수 있지만 자료구조를 보다 확실히 이해할 수 있습니다study-cat.tistory.com   1. include header#include #include // malloc#include // strd..

코딩/C, C++ 2024.10.18

[자료구조] 포인터와 동적 할당, 자료구조 입문하기! (with c언어)

시작하기 앞서 자료구조 포스팅은 c++이 아닌 c언어로 진행됩니다! c언어는 c++과 달리 new, delete, struct 생성자/소멸자, template 없기에 불편할 수 있지만 자료구조를 보다 확실히 이해할 수 있습니다.  1. 동적 할당int* data = (int*)malloc(sizeof(int));int* array = (int*)malloc(sizeof(int) * SIZE);  malloc은 원하는 만큼 heap 메모리를 할당하고 주소를 반환합니다. 이 때 '원하는 만큼' 의 주소 뿐이며 어떤 형태도 정혀지지 않았습니다( 자료형 ), 즉 void pointer의 상태로 return 되기에 형변환을 해줘야 합니다!  동적할당은 크게 2가지 이유로 사용된다고 생각합니다. 첫 번째는 '인스턴..

코딩/C, C++ 2024.10.18

[C/C++] 자료형의 프로모션(실수 방지!)

이 전의 글에서 다뤘었는데, 쫌 더 자세한, 추가적인 내용만 소개하고자 합니다. 1. 자료형의 프로모션?자료형이 다른 값들의 연산에서 어떤 자료형으로 연산되는가?  2. 자료형의 프로모션 규칙정수 + 실수 = 실수정수 + 정수 or 실수 + 실수 = 더 넓은 범위를 갖는 자료형int 형보다 작은 정수형 = int부호 없는 정수형 + 부호 있는 정수형 = 부호 없는 정수형위에서 + 로 표기한 것은 더하기 연산이 아닌 '자료형과 자료형의 만남' 을 표현하기 위해 사용했습니다.  int main(){ double num = 3/2; cout 1) cout 간단한 예시로 num은 double형으로 선언되었지만 선언 값은 정수와 정수의 연산이므로 1 이 출력됨을 알 수 있습니다. 두 번째의 if 또한 ..

코딩/C, C++ 2024.07.10

[C/C++] 포인터 완벽 이해 ( 포인터, 배열, 상수, 다중포인터 )

오늘은 C언어를 입문하는 사람에게 가장 어렵다고 소문난 포인터를 쉽게 이해할 수 있도록 설명해보겠습니다. 잘 이해되지 않는 부분은 댓글로 남겨주세요. 연산자 ( 배경지식 )&(변수 이름) = 해당 변수의 주소*(주소) = 해당 주소의 값 int a = 10; printf("a의 주소 = %d\n",&a); printf("해당 주소의 값 = %d", *(&a)); /// a의 주소 = 6422044 ( 사용자 마다 다름 ) /// 해당 주소의 값 = 10  변수 ( 배경지식 )모든 변수와 값은 메모리의 어딘가에 저장되며 저장된 위치를 가르키는 것이 주소이다. 예를 들면 int a = 5; 라고 할 때 사용자가 편히 사용할 수 있도록 그냥 a만 사용하면 되지만 컴퓨터 내부에..

코딩/C, C++ 2024.06.02

[C/C++] 부동소수점 - 컴퓨터는 정확하다며...

우리 컴퓨터는 모든 데이터를 2진수로 저장한다. 그리고 컴퓨터는 "정확하고 빠르다." 일 터.. 가끔 백준의 수학 문제 중 계산 문제가 틀리는 경우도 많고.. 연구 분야에서도 이러한 일로 오류가 발생하곤 한다. 그러면 왜 이런 오류가 발생하고 어떠헥 해결할 수 있는지 소개하고자 한다. 1. 오차 원인 컴퓨터는 수를 이진수로 나타낸다. 이 때 정수 부분은 어느 수준까지 유한하기에 나타낼 수 있지만 그와 달리 소수 부분은 무한 소수처럼 매우 긴 경우... 이를 다 저장할 수 없다. 그리고 안타깝게도 f = 3.145646546228 -> output : 3.1456465721... [소수점 10자리 까지 출력] 위와 같은 예시처럼 그 뒤의 소수점을 날리는 형태가 아니라 그냥 값이 다르다. 이 원인 또한 이진..

코딩/C, C++ 2024.03.30

[C/C++] 자료형 계산에서 자주하는 실수들

알고리즘 문제를 풀면서 가끔 어이없는 실수로 인해 시간을 날리기 쉽다. 그 중 내가 가장 많이 했던 실수는 자료형 계산이다. 오류가 뜨진 않지만 값이 달라서 더 짜증나는 실수다. 그래서 가장 많이 하는 실수들의 사례를 가지고 왔다. 1. 예시 #include using namespace std; const int INF = 21e8; const long long int INF2 = 21e8; const float f = 3.56789123; #define ll long long int int main() { ll a = INF + INF; ll b = INF + INF2; printf("%lld\n%lld\n",a, b); printf("%f, %.5f, %.4f, %d, %d, %f, %f, %llf"..

코딩/C, C++ 2024.03.29