본문 바로가기
  • 비둘기다
  • 비둘기다
  • 비둘기다

전체 글55

[Data Structure] 연결 리스트(Linked List) ● 연결 리스트(Linked List) 연결 리스트는 선형 리스트처럼 리스트의 한 종류입니다. 연결 리스트는 전체적으로 보면 선형 리스트의 단점을 보완한다는 점이 있지만, 그만큼 구현이 복잡하기 때문에 서로가 장단점은 가진다고 볼 수 있습니다. 선형 리스트의 가장 큰 단점이라고 한다면 바로 리스트의 조작입니다. 선형 리스트는 배열을 기반으로 하기 때문에 정해진 크기 내에서만 활용이 가능하며, 그렇다고 배열의 최대 크기를 너무 크게 잡아버리면 낭비되는 메모리가 많아 결점이 많은 방법이었습니다. 연결 리스트는 이러한 문제를 해결해 줍니다. 연결 리스트는 배열을 사용하지 않고, 데이터 하나하나를 node의 개념으로 접근합니다. 예를 들어 배열에 1과 2를 넣으면 1과 2는 서로 다른 인덱스에 들어있지만 결국은.. 2023. 4. 15.
[Data Structure] 선형 리스트(Linear List) C언어에는 파이썬이나 자바와 달리 list라는 내장된 자료형이 없습니다. 보통 파이썬에서 list를 사용하면 list 내에서의 조작이 굉장히 자유롭습니다. 예를 들어 뒤에 이어 붙이기, 삭제하기 등이 단 하나의 명령어면 해결이 가능합니다. 그러나 C언어에는 list가 존재하지 않습니다. 그래서 위에서 말한 조작이 자유로운 배열의 형태를 직접 만들어주는 게 목적입니다. ● 선형 리스트 c언어에서 구현할 수 있는 리스트에는 여러 종류가 있습니다. 그 중 가장 먼저 생각할 수 있는 것이 선형 리스트입니다. 리스트라는 개념을 생각해보면 항목을 쭉 늘여놓은 목록 같은 개념입니다. 그렇다면 이를 c언어에서 구현한다고 생각했을 때 가장 먼저 생각나는 것이 배열입니다. typedef int element; typede.. 2023. 4. 14.
[Data Structure] 재귀(Recursion) ● 재귀 재귀는 순환이라고도 불리며 함수가 자기 자신을 호출하여 문제를 해결하는 것을 의미합니다. 원래 함수를 정의할 때 A함수 안에 B함수를 정의하는 것은 불가능합니다. 그러나 A함수의 정의에 B함수를 활용할 수는 있습니다. 재귀는 여기서 A함수의 정의에 A함수를 활용하는 것이라고 할 수 있습니다. 재귀를 활용하는 대표적인 예시들이 있습니다. 예를 들어 팩토리얼 함수의 구현입니다. n!을 계산하고자 할 때 우리는 이를 n * (n-1)!로 바꿔줄 수 있습니다. 그리고 우리는 또 (n-1)!을 (n-1) * (n-2)!로 바꿀 수 있습니다. 이를 코드로 구현하면 다음과 같습니다. int factorial(int n) { if(n 2->3이기 때문에 2번 출력문은 1부터 순서대로 적힐 것입니다. 다른 예시.. 2023. 4. 11.
[Data Structure] 이분 탐색(Binary Search) ● 순차 탐색 알고리즘과 시간 복잡도 탐색이란, 수많은 데이터 속에서 내가 원하는 데이터를 찾는 과정을 말합니다. 예를 들어 1부터 100까지의 숫자가 적힌 배열에서 31을 찾는 것은 탐색을 거쳐야 할 것입니다. 그중 순차 탐색이란, 처음부터 끝까지 찾고자 하는 데이터를 탐색하는 것을 말합니다. 순차 탐색 알고리즘을 구현하면 다음과 같습니다. int LSearch(int arr[], int len, int tar) { for (int i = 0; i < len; i++) { if (arr[i] == tar) { return i; } } return -1; } int main(void) { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int length = sizeof(.. 2023. 4. 10.
[이분 탐색] 백준 2417번 (파이썬) : 정수 제곱근 n = int(input()) q = 0 t = n while q 2023. 4. 7.
[이분 탐색] 백준 10815번 (파이썬) : 숫자 카드 이 문제 같은 경우에는 카드를 하나하나 비교해야 하기 때문에 이분 탐색을 사용합니다. N = map(int, input()) my_card = sorted(map(int, input().split())) M = map(int, input()) num_card = list(map(int, input().split())) answer = [] def binary(k, my_card, start, end): mid = (start+end) // 2 if start > end: answer.append(str(0)) elif k == my_card[mid]: answer.append(str(1)) elif k > my_card[mid]: binary(k, my_card, mid+1, end) else: bina.. 2023. 4. 5.