선형 배열이 "번호가 붙여진 칸에 원소들을 채워넣는" 방식이라고 한다면, 연결 리스트는 "각 원소들을 줄줄이 엮어서" 관리하는 방식입니다.
연결리스트의 가장 큰 장점은 삽입과 삭제가 유연하는 것이 가장 큰 장점이다. 하지만, 항상 맨 앞 부터 노드를 찾아가는 과정이 비효율적이지 않기 때문에 새로운 메소드를 만들어서 이를 개선 합니다.
마치 접시를 차곡차곡 쌓았다가 맨 위의 접시부터 다시 꺼내어 사용하는 것처럼, 추가된 데이터 원소들을 끄집어내면 마지막에 넣었던 것부터 넣은 순서의 역순으로 꺼내지는 자료 구조를 스택 (stack) 이라고 부릅니다.
연산자가 피연산자들의 사이에 위치(A + B) \* (C + D)연산자가 피연산자들의 뒤에 위치AB + CD + \*연산을 만나면 스택에 집어 넣는다스택에 있는 연산자는 아직 표현되지 못한 연산자들이다.을 스택에 저장 하고 나서, +를 만나면 우선순위가 가 높기 때문에
수식을 왼쪽부터 시작해서 오른쪽으로 차례대로 읽어드리면서피연산자가 나타나면, 스택에 넣어준다연산자가 나타나면, 스택에 들어있는 피연산자를 두 개 꺼내어 연산을 적용하고, 그 결과를 다시 스택에 넣어둔다위 과정을 반복하면 마지막에 모든 연산이 적용된 결과가 스택에 유일하
큐에서는 스택과는 반대로, 어느 시점에서 큐에 들어 있는 데이터 원소를 꺼내면 큐에 들어 있는 원소들 중 가장 먼저 넣었던 것이 꺼내집니다. 따라서 큐를 선입선출 (FIFO; first-in first-out) 이라고도 부릅니다.자료를 넣은 때의 연산꺼낸 데이터를 반대
큐에 담을 수 있는 데이터의 양 (우리 강의에서 이용하는 용어를 가져다 쓰자면, "데이터 원소의 개수") 이 무한할 수는 없을 것입니다. 만약 큐에 담을 수 있는 원소의 개수의 상한을 미리 정하고 이를 지킬 수 있다면, 선형 배열을 이용해서 큐를 효과적으로 구현할 수
큐가 FIFO(First-In-First-Out) 방식을 따르지 않고, 원소들의 우선순위에 따라 큐에서 빠져나오는 방식우선순위 큐를 구현하는 데에는 두 가지의 서로 다른 접근 방법을 생각할 수 있습니다큐에 원소를 넣을 때 (enqueue 할 때) 우선순위 순서대로 정렬
데이터의 검색과 탐색에 아주 널리 이용되는 자료 구조로서 트리 (tree) 라는 것이 있습니다. 우리 말로 "나무" 라고 번역하기도 하는데, 대부분의 경우에는 그냥 "트리" 라고 부릅니다. 트리를 딱딱하게 말하면, 순환하는 길이 없는 그래프 (graph) 로 정의합니다
이진 트리는, 트리에 포함되는 모든 노드의 차수가 2 이하인 트리를 말합니다. 즉, 모든 노드는 자식이 없거나 (리프 노드의 경우), 하나만 있거나, 아니면 둘 있는 세 경우 중 하나에 해당합니다.size() - 현재 트리에 포함되어 있는 노드의 수를 구함depth()
원칙수준(Level)이 낮은 노드를 우선으로 방문같은 수준의 노드를 사이에는 부모 노드의 방순 순서에 따라 방문(왼 > 오)image-20210422203246621순회의 결과: A -> B -> C -> D -> E ... Jimg수준이 낮은 노드 부터 방문해서 큐에
모든 노드에 대해서,위 성질을 만족하는 이진 트리 (단, 중복 데이터는 없다고 가정한다) 이진 탐색을 적용하기 위해서는 탐색 대상인 배열이 미리 정렬되어 있어야 하므로, 이 배열에 데이터 원소를 추가하거나 배열로부터 데이터 원소를 삭제하는 일은 n 에 비례하는 시간을
키(key)를 이용해서 노드를 찾는다만약 해당 키의 노드가 없으면 삭제할 것이 없음노드가 있으면 찾은 노드의 부모 노드도 알고 있어야 함찾은 노드를 제거하고도 이진 탐색 트리 성질을 만족하도록 트리의 구조를 정리입력: 키 (Key)출력: 삭제한 경우 True, 해당 키
[코딩테스트 연습] 정렬(Sort) - 가장 큰 수 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수...
적절한 자료구조와 알고리즘 선택 해야한다.만약 이름 대신 번호가 주어 졌다면 -> 선형 배열 이지만, 번호 말고 다른것(예: 문자열)로 접근 할 수 있는 좋은 자료구조는 없나요?해쉬는 키(Key)와 해시 테이블(Hash Table)로 구성된다.키를 해시 테이블에 매핑하
알고리즘의 각 단계에서 그 순간에 최적이라고 생각되는 것을 선택단, 현재의 선택이 마지막 해답의 최적성을 해치지 않는 경우만 적용가능빌려주려 합니다. 학생
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.예를 들어, 숫자 1924에서 수 두 개를 제거하면 19, 12, 14, 92, 94, 24 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.문자열 형식으로 숫자 number
아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다.12 = 5 + 5 + (5 / 5) + (5 / 5)12 = 55 / 5 + 5 / 512 = (55 + 5) / 55를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다.이처럼
가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다.타일을 가로로 배치 하는 경우타일을 세로로
[코딩테스트연습] 사탕담기 문제 설명 m 그램(gram)을 담을 수 있는 가방에 사탕을 가득 채우는 경우의 수를 구하려 합니다. 단, 같은 사탕은 또 넣을 수 없습니다. 가방이 감당할 수 있는 무게 m, 사탕별 무게가 담긴 배열 weights가 매개변수로 주어질 때, 가방을 정확히 m 그램으로 채우는 경우의 수를 return 하는 solution 함수...
선형대수(Linear Algebra)의 목표는 어떤 연립 일차 방정식, 즉 linear system(선형 시스템) 문제라도 정형적인 방법으로 표현하고 해결 하는 방법을 배우는 것아래의 linear system은 3개의 선형 방정식으로 구성 되어 있다.
가장 간단한 형태의 linear system(선형 시스템) 문제를 살펴 보자
※ 주의본 문제는 일부러 시간복잡도가 오래 걸려도 정답이 나오도록 제한 시간이 넉넉하게 설정되어 있습니다.본 문제를 정말 빠른 알고리즘으로 풀려면 구글에서 longest palindrom subsequence로 검색을 해보세요.앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(
숫자의 인수 분해는 주어진 숫자(예: 12)를 여러 숫자의 곱으로 분해(예: $3 \* 4$)하여 표현 하는 것을 말한다. 이러한 인수 분해는 다음과 같은 상황에서 필요하다분수의 약분두 수의 최대공약수두 수의 최소공배수예를 들어 $\\frac{4}{24}$를 약분 한다
행렬의 종류를 구조화 다음 다음 그림과 같다.행렬에서 가로줄을 행(row), 세로줄을 열(column)이라 한다. m개의 행과 n개의 열이 있는 다음과 같은 행렬을 $m\\times n$ 행렬, m행 n열의 행렬, 또는 m by n 행렬이라 한다.$$\\begin{bm
$m \\times n$ 행렬 $A$와 $n \\times p$ 행령 B의 곱은 $A$의 열벡터(column vector) $a_i$와 $B$의 행백터(row vector) $b_j^T$ 의 곱으로 다음과 같이 표현 할 수 있다.$$AB = a_ab_1^T + a_2b
중등 교과과정에서 배운 함수의 개념은 다음과 같다.함수는 두 집합간의 맵핑룰(mapping rule)이다. 입력이 정의되는 D를 정의역(domain)이라고 한다. 출력이 정의되는 집합 C를 co-domain(공역: 쌍을 이루는)이라고 하여, co-domain 중 실제
$v = (v_1, v_2, \\dots, v_n)$v의 크기: $||V|| = \\sqrt{v_1^2 + v_2^2 + \\dots + v_n^2}$$\\frac{1}{|\\mathbf{v}|} \\mathbf{V}$$\\mathbf{u}=\\left(u{1}, u{