공부

    2023년 회고

    정말 오랜만에 글을 작성하는 것 같다. 마지막 포스팅 시점으로부터 정말 많은 일을 했기에 글을 쓸 짬이 안났던 것 같다.. 라고 하기엔 그냥 나의 게으름인 것 같다. 결론부터 얘기하자면 작년 이맘때쯤의 나와 비교했을 때 정말 많은 성장이 있었던 한해였던 것 같다. Github 올해부터 본격적으로 깃허브를 시작했다. 6월부터 시작해서 6개월을 날린듯한 감이 있지만 이제는 깃허브 없으면 프로젝트 못할 것 같다는 생각이 들 정도로 깃 사용에 익숙해지려고 노력했다. 잔디를 보면 11월과 12월을 정말 바쁘게 보냈다는 것을 알 수 있는데, 이때 연구실 프로젝트와 대회 프로젝트까지 일정 내에 완료해야 했기 때문에 정말 노트북을 잡고 살았던 것 같다. Github stat은 B-로 마무리 될 것 같다. 무슨 기준으로..

    [Algorithm] 알고리즘을 배우는 이유

    왜 이런게 생겼나요?서로 다른 2개의 알고리즘이 있을 때, 똑같은 문제를 풀 수 있는 2개의 알고리즘이 있다면, 어떤 알고리즘을 사용하는 것이 더 빠른가? 라는 문제가 있다고 가설을 세워 보겠다. 기본적인 답은 다음과 같이 생각할 수 있다. 둘 다 코딩을 해서 어떤 알고리즘이 더 빠른지, 메모리는 얼마나 소비하는지 확인한다. 하지만 프로그래머는 몸값이 비싸고 개인별로 능력치도 상이하다. 때문에 오류발생 가능성이 높기에 최선의 방법이 아니다. 주어진 알고리즘을 수학적으로 분석해서 어떤 알고리즘이 더 좋은지 결론을 내리는 것이 필요하다.글쓴이의 마음가짐대부분의 컴공생이나 개발자는 코딩테스트를 위해 알고리즘을 많이 공부한다. 물론 이것은 필자 또한 마찬가지이다. 하지만 알고리즘 공부의 목적을 단순히 코딩테스트..

    [자료구조] 트리(Tree) 기본

    개요 트리는 노드들의 계층 관계를 표현한 집합체이다. 모양은 침엽수와 같은 나무를 거꾸로 매달아 놓은 것처럼 생겼는데 이제부터 사진들과 함께 알아 볼 것이다. 트리는 종류가 많은데, 해당 글에서는 트리의 정말 기본적인 내용만 다룰 것이다. 규칙 1. 최상위 레벨에 있는 노드는 루트라고 하며 진입 차수가 0이다. 루트 노드는 트리마다 하나밖에 존재하지 않는다. 2. 모든 노드는 0, 또는 n개의 자식 노드를 가진다. 3. 모든 노드는 하나 이상의 부모 노드를 가진다. 4. 트리는 level을 가진다. 가장 꼭대기에 있는 루트 노드는 레벨이 0이며 트리의 루트로부터 특정 vertax까지의 경로 길이로 결정된다. 5. 루트 노드로부터 특정 노드까지의 경로는 반드시 1개만 존재한다. 6. 만약 트리가 루트 뿐이..

    [자료구조] 연결리스트(Linked List)란?

    개요 Linked List란 모든 노드들이 자신의 값과 나의 다음 값을 pointing하는 자료구조이다. 왜 사용하는가? 해당 자료구조를 왜 사용하는지 간단한 예시를 들겠다. 예를 들어, 이러한 모양의 배열이 있는데 현재 나는 4와 6 사이에 5라는 값을 넣고 싶다. 이럴땐 어떻게 해야할까? 사진 2와 같이 6과 8을 오른쪽으로 밀어서 공간을 확보한다. 공간을 확보한 후 5를 insert 한다. 얼핏 보면 이게 당연한 것처럼 느껴질 수 있다. 하지만 해당 방법은 굉장히 비효율적이다. 이러한 번거로움을 해결하기 위한 자료구조가 Linked List 즉 연결리스트이다. Linked List의 구조 Linked List는 하나의 메모리 공간(Node)에 데이터와 포인터를 저장한다. 그렇다면 이 자료구조를 사용..

    [자료구조] C언어 Pointer에 대하여

    개요 알고리즘은 선행 지식으로 자료구조에 대한 이해를 필요로 한다. 자료구조의 경우엔 포인터에 대한 사전 지식이 있다면 이해하기 좋다. 본 글에서는 C언어의 포인터 변수에 대한 아주 기초적인 내용을 다룬다. Pointer란? C언어에서 포인터는 '메모리의 주소를 저장하는 변수' 이다. '&' operator는 어떤 변수의 주소를 받아올 수 있다. '*' operator는 참조한 값을 다시 역으로 따라간다. 포인터는 기본적으로 4byte를 할당받는다. 이렇게 설명하면 어려울 수 있으니 예제코드와 함께 설명하겠다. #include int main() { char a = 'A'; char* pointer = &a; printf("%c %p\n", a, pointer); printf("%p %p\n", &a, ..