본문 바로가기

자료구조알고리즘

(29)
[코딩테스트 ALL IN ONE]코딩테스트 🍯 TIP # 자료구조: 데이터를 저장하고 관리하는 방식자료구조는 데이터를 체계적으로 저장하여 메모리를 효율적으로 사용할 수 있게 하고, 빠르고 안정적으로 데이터를 처리할 수 있도록 도와준다. 메모리구조를 잘 알고 있어야 자료구조의 중요성을 알게된다. example)num1 = 10num2 = 16num3 = 17num4 = 5num5 = 11num6 = 14num7 = 1num8 = 4num9 = 20num10 = 20지금은 10개지만, 데이터를 100개, 1000개를 저장해야하는 상황이 온다면 변수를 하나하나 지정해서 저장하는건 무리가 있다.이런 경우, 비슷한 성질의 데이터를 모아서 저장을 하면 좋겠다. 이렇게 변수를 하나하나 지정해서 데이터를 저장하기보다는, Array 자료구조를 사용하면 데이터를 더 효율적으..
약수의 개수 구하는 방법 숫자 N의 약수의 개수를 구하는 문제가 주어졌을 때, 1부터 N까지 모두 탐색을 하게 되면, N이 100,000같이 크기가 클 경우 시간이 많이 걸린다. 약수 개수를 구할 때, 시간을 줄이는 방법은 2가지가 있다. 1/ 소인수분해를 이용하는 방법 N을 소인수분해하여 각 소수의 지수를 구한 후, (각 지수+1) 값들을 곱하여 약수의 개수를 구한다. ex) N이 24일 경우 24 = 2³ * 3¹ → (3 + 1) * (1 + 1) = 4 * 2 = 8 즉, 24의 약수의 개수는 8이 된다. (1, 2, 3, 4, 6, 8, 12, 24) 2/ N의 제곱근으로 범위를 좁혀 탐색 만약 N이 24일 경우, 24의 제곱근(√24)은 4.xxxx이다. 따라서 1~24가 아닌, 1~4까지만 탐색해도 [ 1, 2, 3..
동적 배열(Dynamic Array) 선언 이후에 size를 변경할 수 없는 정적배열(static array)과 다르게 동적 배열(dynmic array)은 size를 늘릴 수 있다. # Static Array vs Dynamic Array - static array 한계점 : 고정된 저장공간. array는 선언 시 크기를 지정해야하고 딱 그만큼만 메모리를 할당받기 때문에, 프로그램이 실행되는 중간에 추가적으로 더 데이터가 들어온다면 저장을 할 수 없다. - dynamic array : 그런 상황이 왔을 때, 배열의 크기를 늘림으로써, 엄밀히 말하면 더 큰 배열을 새로 다시 할당함으로써 데이터를 더 추가할 수 있다. 더보기 (static) array에 대해서 ↓ 2023.09.06 - [자료구조알고리즘] - 배열(Array) # Dynami..
배열(Array) (static) Array 아래의 배열의 특성 두 가지만 이해하면 배열에 대해 다 이해한 것. # 배열의 특성 1. 고정된 저장 공간(fixed-size) 2. 순차적인 데이터 저장(order) 배열은 선언 시에 size를 정하여, 해당 size만큼의 연속된 메모리를 할당받아 data를 연속적/순차적으로 저장하는 자료구조. - 배열은 선언시부터 size가 정해져있고, 그 size만큼 연속된 메모리를 할당받아놓은 상태. - 그리고 연속된 메모리에 data를 연속적/순차적으로 저장하는 자료구조. 실제 C언어에서 Array를 어떻게 선언하는지 보자. int arr[5] = {3, 7, 4, 2, 6} int형 데이터를 5개까지 저장하는 배열을 선언했다. → int arr[5] 선언과 동시에 초기화도 해줬다. ..
리스트(List) ** 자료구조 : 데이터를 저장하고 관리하는 방식 List 자료구조는 SET 자료구조와 비교가 많이 된다. 예를 들어, 1,2,3을 저장하려고 한다. # SET 자료구조 set에 저장할 때는 (1,2,3)으로 저장을 하든, (3,2,1)로 저장하든, (2,3,1)로 저장하든 다 똑같다. 원소가 무엇이 저장이 되어있느냐가 중요하다. 순서는 중요하지 않다. # List 자료구조 하지만, List는 순서가 중요한 자료구조. [1,2,3], [3,1,2]는 전혀 다른 리스트가 된다. 순서가 중요하기 때문에 순서가 바뀌면 전혀 다른 list가 된다. ## List 자료구조 구현방법 List 자료구조는 어떻게 구현이 될까? 크게 두 가지 방법이 있다. 1/ Array List - Array로 만들어진 list. 배..
[심화] 시간복잡도 Time Complexity 시간복잡도 활용법 in 코딩테스트 1. 시간복잡도 이해하고 외우기 2. 제한 조건 보는 법 3. 다양한 접근 Step 1 : 문제 이해하기 → '접근 방법'을 생각해내기위해서는 문제를 제대로 이해해야한다. Step 2 : 접근 방법 → 제일 중요. 문제를 어떻게 풀지 '접근 방법'을 생각해내야만 코드를 구현할 수 있다. 접근방법을 생각해내기 위해서 '자료구조'와 '알고리즘'을 수박겉핥기 식으로 배우는게 아니라, 밑바닥부터 공부를 한다. Step 3 : 코드 설계 Step 4 : 코드 구현 그냥 시간 복잡도는 이거다, 이렇게 하고 지나가는게 아니라, 왜 Big-O(n)인지, 왜 Big-O(1)인지 등을 하나하나 이해를 해야 나중에 접근 방법을 생각해낼때 자료구조 특성, 알고리즘 특성을 활용할 수 있다. 다..
[기본] 시간복잡도 Time Complexity ## 알고리즘이란? 알고리즘 : 문제해결방법 예시 : 숫자가 적힌 5개의 공이 있다. 5개의 공을 오름차순 정렬을 하려고 한다. 어떤 방법으로 정렬을 완료할 수 있을까? 1/ 가장 작은 숫자가 적힌 공을 찾자 → 1 이 공을 맨 앞에 둔다. → 1 | 3 5 2 4 2/ 나머지 4개의 공(3 5 2 4) 중, 가장 작은 숫자가 적힌 공을 찾자 → 2 이 공을 두 번째 자리에 둔다. → 1 2 | 3 5 4 3/ 이 과정을 나머지 공들에도 반복하면 정렬이 완료된다. 정리해보면, 문제상황 : 공 5개를 오름차순 정렬 해결방법 : ' 알고리즘 ' 가장 작은 숫자를 찾아 서 맨 앞에 놓는다. 남은 공들에 대해서 (1) 방법 반복 위 말로 풀어쓴 알고리즘을 코드로도 작성할 수 있다. ## 실행시간 이 알고리즘을 ..
[코딩테스트 ALL IN ONE] 자료구조와 메모리구조 이해하기 자료구조 : 데이터를 저장하고 관리하는 방식 그렇다면, 데이터를 저장하는 곳은? → 메모리 메모리는 크게 하드디스크와 RAM 메모리가 있다. 우리가 코딩을 하고 저장하면 코드들이 하드디스크에 저장된다. 저장된 코드들을 실행하면 RAM 메모리에 데이터가 올라가게 된다. 우리의 관심사는 RAM 메모리에 있다. 만약 비효율적인 자료구조를 사용하면 RAM 메모리 낭비를 초래하고 프로그램 성능 저하의 원인이 된다. 그래서 용도와 상황에 맞는 자료구조를 잘 선택해야한다. 나중에 배울 자료구조 중, LIST를 잠깐 보자. LIST: 숫자나 문자와 같은 데이터를 순차적으로 나열해 놓은 집합 L,I,S,T를 각각 하나의 문자형 데이터라고 생각하자. L,I,S,T를 Array로 구현한다면 데이터가 메모리상에 연속되게 저장..