알고리즘 리마인더 구현
·
크래프톤 정글
안녕하세요 크래프톤 정글 8기 진행 중인 고웅입니다. 4월 10일 크래프톤 정글 알고리즘 주간이 끝나고 C 프로그래밍을 시작한 5주 차입니다. 4주간 알고리즘 문제를 풀기 위해 많은 노력을 들였고 나름대로 많은 성장이 있었다고 생각합니다. 하지만 5주 차부터 시작되는 C프로그래밍은 과거 대멸종과 같이 한 순간에 모든 관심사와 중요도를 뒤엎을 정도의 대 격변이었습니다. 그리고 그런 대격변에서도 알고리즘 감각은 계속 유지할 수 있어야 한다고 생각이 들었습니다. 그래서 알고리즘 리마인더를 구현해 봤습니다.알고리즘 리마인더?이름은 거창하게 있어보이게 지었지만 간단하게 말해서 그냥 알고리즘 문제를 복습할 수 있도록 체크하는 체크리스트?입니다. 근데 자동화 요소를 곁들인...새로운 문제를 푸는 것도 중요하지만 무작..
C 언어 테스트 기반 개발 환경 구축기 (CLion & VSCode) Mac
·
크래프톤 정글
안녕하세요! 크래프톤 정글 8기 진행 중인 고웅입니다. 크래프톤 정글 5주 차가 시작되며 본격적으로 C 언어 학습 및 자료구조 구현이 진행되고 있는데 정글에서 제공해 준 과제를 구현하고 있는데 테스트 케이스를 직접 터미널 입력으로 테스트하는 것이 불편하기도 했고 자료구조를 처음부터 전부 구현하는 것이 아니라 특정 함수의 기능만 구현하다 보니 오히려 구현 의도나 방법이 잘 생각나지 않고 이해가 되지 않는 것 같아 처음부터 구현을 할 수 있었으면 하는 바람이 있었습니다. 그래서 이 글에서는 제가 C 언어로 구축했던 테스트 기반 개발 환경을 소개합니다. Clion과 VSCode 두가지 IDE에서 테스트를 진행했으며 맥북에서는 테스트를 했으나 윈도우의 경우는 다를 수 있습니다. C에서도 테스트 주도 개발(TDD..
크래프톤 정글 8기 - 32일차 TIL (포인터)
·
크래프톤 정글
TIL - 2025.04.11 (금요일)📝 오늘 배운 것 (c - 포인터)포인터란?포인터는 "주소값을 저장하는 변수"이다.즉, 어떤 데이터가 메모리 어딘가에 저장되어 있을 텐데, 포인터는 그 "메모리 주소"를 기억하는 변수​.왜 포인터가 필요할까?그보다 c를 처음 입문할 때 들었던 생각이 "왜 주소라는 것을 직접 다뤄야 할까?"였다. 그도 그럴 것이 파이썬으로 주로 코딩에 입문을 하고는 하는데 파이썬은 그냥 하고 싶은 대로 하면 되었다. 하지만 c를 배우며 포인터를 만나면 그 개념부터 혼동이 된다. 나 또한 지금도 포인터가 혼동된다.이 어지러운 포인터를 이해를 위해서 그나마 주소로 설명하는 것이 유용하다.포인터는 집 주소?한번 생각해보자 변수 : 집 안에 살고 있는 사람포인터 : 그 집의 주소int a..
크래프톤 정글 8기 - TIL 31일차 (링크드 리스트 - C)
·
크래프톤 정글
TIL - 2025.04.10 (목요일)📝 오늘 배운 것: C로 구현하는 링크드 리스트4월 10일, 크래프톤 정글에 입소한 지 벌써 1달이 되었다.1~4주 차까지는 알고리즘 위주로 학습했고, 이제부터는 C 언어로 자료구조를 구현하거나 문제를 풀어보는 활동을 4주간 진행할 예정이다.링크드 리스트란?링크드 리스트(Linked List)는 데이터를 순차적으로 저장하는 자료구조로, 각 요소가 포인터를 통해 다음 요소와 연결되어 있다.배열과는 달리 메모리상에서 연속된 공간에 있지 않으며, 노드(Node)라는 단위로 구성된다.노드는 보통 두 가지 요소를 가진다:데이터(Data): 실제 저장 값포인터(Next): 다음 노드의 주소 (또는 참조)[1 | ●] → [2 | ●] → [3 | null]🔹 링크드 리스트..
크래프톤 정글 8기 - 30일차 TIL (백준 13869 Dating On-Line)
·
크래프톤 정글
TIL - 2025.04.09 (수요일)📝 오늘 푼 문제 (백준 13869 Dating On-Line)문제외국어 문제로 번역해서 풀겠습니다.알렉스는 완벽한 파트너를 찾기 위해 온라인 데이트 시스템에 가입했습니다. 이 시스템은 각 회원이 N가지 활동에 대한 만족도를 0점에서 100점까지 점수로 매기는 양식을 작성하도록 요구합니다. 이 정보를 잠재적인 데이트 상대에게 제공하기 위해 시스템은 "방사형 다이어그램"이라는 특수한 다각형으로 구성된 프로필을 생성합니다.N개의 활동에 대한 방사형 다이어그램은 평면에 N개의 점을 표시하여 그립니다. 수직 방향에서 시작하여 시계 방향으로 i번째 점은 구성원이 지정한 i번째 활동을 나타내며, 다이어그램 중심에서 S i 만큼 떨어진 거리입니다. 여기서 S i는 구성원이 해..
크래프톤 정글 8기 - 4주차 시작 전 회고
·
크래프톤 정글
📝 주간 학습 회고 (TWL) - 크래프톤 정글 4주 차정글 입소 28일 차 4주 차 시작 전 3주차 회고 및 4주차 목표 설정🎯 이번 주 목표 다이나믹 프로그래밍 문제 많이 풀어보기 그리디 문제 풀기 CSAPP 3장 3.4, 3.7, 3.8 이해하기📚 학습한 내용CSAPP : 3.1 역사적 배경컴퓨터 시스템 : CSAPP 3장 정리 - 3.1장 역사적 배경CSAPP : 3.2 프로그램의 인코딩컴퓨터 시스템 : CSAPP 3장 정리 - 3.2장 프로그램의 인코딩 Part. 1컴퓨터 시스템 : CSAPP 3장 정리 - 3.2장 프로그램의 인코딩 Part. 2CSAPP : 3.4 정보 접근하기컴퓨터 시스템 : CSAPP 3장 정리 - 3.4 장 정보 접근하기 Part.1컴퓨터 시스템 : CSAPP 3장..
크래프톤 정글 8기 - 25일차 TIL (백준 9251 LCS)
·
크래프톤 정글
TIL - 2025.04.04 (금요일)📝 오늘 배운 것 (백준 9251 LCS)문제LCS(Longest Common Subsequence, 최장 공통부분 수열) 문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.데 필요한 곱셈 연산 횟수의 최솟값을 구하는 프로그램을 작성하시오. 입력으로 주어진 행렬의 순서를 바꾸면 안 된다.입력첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.출력첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.예제 입력ACAYKPCAPCAK예제 출력4💡 문제 해결LCS 문제를 풀기 위..
크래프톤 정글 8기 - 24일차 TIL (다이나믹 프로그래밍 입문)
·
크래프톤 정글
TIL - 2025.04.03 (목요일)📝 오늘 배운 것 (동적 계획법)동적 프로그래밍 (Dynamic Programming)동적 프로그래밍은 복잡한 문제를 더 작은 하위 문제로 나누어 해결하는 알고리즘 설계 기법이다. 큰 문제를 작은 문제로 분할하여 각 하위 문제의 해를 계산하고, 이를 이용하여 상위 문제의 해를 구하는 방식으로 동작한다.기본 원리문제 분할: 복잡한 문제를 더 작은 하위 문제로 나눈다.메모이제이션(Memoization): 이미 계산한 결과를 저장하여 재사용함으로써 중복 계산을 피한다.상향식 접근법: 가장 작은 하위 문제부터 해결하여 점차 상위 문제를 해결해 나간다.동적 프로그래밍분할 정복부분 문제가 중복되어 재활용 됨부분 문제가 서로 붕복되지 않음메모이제이션 기법 사용메모이제이션 기법..
크래프톤 정글 8기 - 23일차 TIL (트라이 Trie)
·
크래프톤 정글
TIL - 2025.04.02 (수요일)📝 오늘 배운 것 (트라이 Trie)트라이(Trie)?트라이(Trie)는 문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조이다. 주로 문자열이 키인 경우가 많으며, 문자열 특화 자료구조의 대표적인 예이다.특징이진 탐색 트리와 달리 노드 자체에 키를 저장하지 않고, 노드가 트리에서 차지하는 위치가 연관된 키를 정의한다.노드의 모든 자손은 해당 노드에 연관된 문자열의 공통 접두사를 공유한다.루트는 빈 문자열에 연관된다.각 노드는 자식 노드들에 대한 포인터를 가지고 있으며, 일반적으로 형태의 Map 구조를 사용한다.시간 복잡도트라이 생성 시간 복잡도 : O(M*L) - M은 총 문자열의 수, L은 가장 긴 문자열의 길이삽입 시간 복잡도 : O(L) - ..
크래프톤 정글 8기 - 22일차 TIL (B-Tree)
·
크래프톤 정글
TIL - 2025.04.01 (화요일)📝 오늘 배운 것 (B-Tree)B-Tree?자가 균형 트리로 이진트리를 확장하여 하나의 노드가 두 개 이상의 자식을 가질 수 있도록 설계되었다.B-Tree는 AVL 트리로 레드-블랙 트리와 더불어 skewed tree(한쪽으로 치우친 트리)를 해결할 수 있는 자료구조 중 하나이다. AVL 트리나 레드-블랙 트리를 모든 데이터가 메모리에 적재할 수 있는 경우에 적용함과 달리 B-Tree는 대용량 데이터를 다뤄야 하는 DB나 디스트에 주로 적용된다.대부분 트리에서의 연산이 높이에 따라 결정됨을 볼 때 B-Tree는 h를 줄이기 위해 B-Tree의 노드에 가능한 많은 값을 집어넣어 높이를 낮춤으로써 fat tree의 형태를 보인다. 이렇게 하나의 노드에 여러 정보를 ..