본문 바로가기

전체 글66

[Linux] Linux 알아가기 리눅스?리눅스(linux)는 운영체제의 한 종류로 리누스 토르발즈라는 분이 취미 삼아 유닉스를 기반으로 만든 운영체제 입니다. 오픈 소스로 되어 있기 때문에 사람들이 다양한 분야에 적용하여 사용할 수 있었죠. 리눅스 배포판리눅스 배포판은 리눅스 커널, GNU 등 여러가지 자유로운 소프트웨어로 구성된 운영체제입니다. 대표적으로 우분투(Ubuntu), Fedora, 데비안(Debian), CentOS등이 있습니다. 이 배포판으로는 여러가지 차이가 있지만 패키지 관리에 따라 비슷한 부분도 존재합니다.Red Hat-BasedFedora, CentOS`rpm`이나 `yum` 패키지 관리도구를 이용하며 설치나 관리, 업데이트가 쉬운 편입니다.Debian-BasedUbuntu, Debian`apt` 패키지 관리도구를.. 2024. 4. 2.
DFS, BFS 그래프 탐색 알고리즘 1 그래프 자료구조 간단 정리 그래프 구현 방법의 차이 그래프(Graph)는 정점(Vertax, Node)과 간선(Edge)으로 이루어진 그래프이며 정점 간 연결관계를 간선으로 나타낸다. 그래프는 연결 상태에 따라 양방향, 방향 가중치, 완전 그래프등으로 분류된다. 그렇다면 그래프를 구현하는 방법으로 어떤 것들이 있을까? 인접 행렬 (Adjacency Matrix) : 간선의 개수와 무관하게 V^2의 공간 복잡도를 가지며 O(1)로 위치의 값을 찾아낼 수 있는 행렬식 구조이다. 인접 리스트 (Adjacency List) : 해당 정점에 연결된 다른 정점들을 찾는 방식으로 공간 복잡도는 O(E+V) 지만 확인하는데 오래걸린다. 그래프의 특징 사이클이 있거나 없을 수 있다. 만약 없는 경우, 트리 구조라고 한다.. 2024. 3. 21.
트리 순회 알고리즘 트리(Tree) 트리는 노드(Node)와 그 노드들을 연결하는 간선(Edge)로 이루어진 자료구조이다. (노드가 N개인 경우 간선은 N-1개이다.) 트리는 계층적 관계로 이루어져 있기 때문에 그래프와 다르게 사이클이 이루어지지 않는다. 사이클이 이루어지지 않고 방향성이 정해져 있기 때문에 트리는 그래프 중에서 DAG에 속하는 그래프이다. 트리는 그럼 어떻게 이루어져 있는가? 트리의 구성은 다음과 같다. 가장 최상단에 루트 노드(Root Node)가 있고 밑으로 내려갈수록 자식 노드가 있으며 최하단의 노드는 리프노드(Leaf Node, 단말노드;)라고 부른다. 가장 헷갈려하는 구성요소는 높이와 깊이이다. 높이는 말그대로 트리의 최대 높이를 말한다. 레벨과 동일하며 깊이는 노드를 중심으로 경로의 길이를 의미.. 2024. 3. 14.
[SQLD] 인덱스 인덱스(Index) 인덱스는 관계형 데이터베이스에 검색 속도를 높이기 위해 컬럼을 색인화하는 것을 말한다. 테이블에 있는 모든 데이터를 돌아보며 원하는 데이터를 가져 오기엔(Full Table Scan) 시간이 오래 걸리기 때문에 컬럼의 값과 레코드에 있는 주소를 키와 값으로 묶어 인덱스를 만드는 것이다. 예를 들어, 저장된 데이터의 양이 정말 많은 경우 검색을 할 땐 시간과 자원이 많이 소모 될것이다. 그래서 자주 조회되는 컬럼에 대해 인덱스 테이블을 만들어 `SELECT`문을 사용해 Index 테이블에 있는 값들로 결과를 조회한다. 그러면 이전 보다 성능을 더 올릴 수 있을 것이다. `EXPLAINS`를 통해 쿼리 접근한 행수(rows)를 비교해보면 인덱스를 사용했을 때 좀 더 빠르게 접근했다는 것을.. 2024. 3. 11.
[코테스터디] 정렬 팀 정렬(Tim Sort) 파이썬에서 주로 사용되는 고성능 정렬 알고리즘이다. 주로 `sorted`와 `sort` 이 두가지로 사용되며 이 둘은 차이점이 존재한다. `sort`는 리스트 자체를 정렬하는 제자리 정렬(in-place Sort)이므로 결과를 리턴할 필요 없이 정렬 후 적용 시켜버린다. `sort`와 `sorted`의 인자인 `key`에 함수를 넣을 수 있다. 일반적으로 람다 함수를 넣는 경우가 있는데 직접 함수를 만들어서 넣어도 된다. 만약 특정 조건으로 정렬을 하고 싶을 때 다음과 같이 사용하면 된다. 공식문서 참조↗ 계수 정렬(Counting Sort) 시간 복잡도 공간 복잡도 O(N) O(N) 배열의 인덱스를 특정 값으로 사용하는 정렬 알고리즘이다. 예를 들어 다음과 같이 첫번째 줄은 .. 2024. 3. 11.
[SQLD] 정규화의 필요성 정규화는 왜 생겨났을까? 한 릴레이션에 두 개 이상의 속성(Attribute)가 혼합하게 되면 중복 저장으로 인해 공간을 낭비하게 된다. 좋은 관계형 데이터베이스를 설계하기 위해 이상 현상(Anomaly)이 생기지 않게 설계를 해야하는데 이 이상 현상이 테이블 내에 중복성으로 인해 생기는 데이터 불일치 현상이다. 이상 현상에는 삽입 이상, 삭제 이상, 갱신 이상이 존재한다. 삽입 이상 : 테이블에 원치 않는 자료가 삽입된다는지, 자료가 부족해 삽입이 되지 않을 때 발생하는 문제점이다. 삭제 이상 : 테이블에 자료를 삭제하고 싶은데 튜플의 전체 열을 삭제해야함으로 원치 않는 정보까지 삭제해야하는 현상이다. 갱신 이상 : 테이블에 어떤 값을 업데이트 했을 때 다른 값들과 불일치가 발생하는 현상이다. 정규화 .. 2024. 3. 2.
[SQLD] JOIN의 개념과 종류 JOIN JOIN은 두 개 이상의 테이블을 연결 혹은 결합하여 데이터를 출력하는 것이다. 일반적으로 PK와 FK의 연관에 의해 성립된다. 없어도 논리적인 값들의 연관으로 성립이 가능하다. 대표적인 조인의 종류로 내부조인, 외부조인, ANSI조인이 있다. ORM에서 FK키를 참조할 때 발생하는 SQL문이다. Oracle 문법에서는 `JOIN`이라는 명령어를 사용하지 않고 WHERE 조건절에서 JOIN을 지정한다. 반면, ANSI 표준 문법은 다른 SQL 프로그램에서도 공통적으로 사용 가능한 문법으로 JOIN 명령어를 사용 가능하다. 내부 조인(INNER) EQUI JOIN(=) 2개의 테이블 간 컬럼이 정확하게 일치하는 경우 사용하는 JOIN이다. SELECT A.USER_NAME, B.DEPT_ID, B.. 2024. 3. 1.
[SQL] 터미널로 MySQL, PostgreSQL 설치하기 (MacOS) 이번 포스팅은 간단한 가이드라인 튜토리얼입니다. Mac에서 MySQL을 설치하는 방법으로 두가지 방법이 있습니다. MySQL 홈페이지↗에서 파일을 다운받아 설치하는 방법 Homebrew 패키지 관리자를 이용해 설치하는 방법 이번 포스팅에서는 Homebrew 패키지 관리자를 통해 MySQL을 설치해보려고 합니다. MySQL 설치하기 먼저, Brew가 설치되었다는 가정하에 시작하려고 합니다. Brew를 설치하지 못한 분들은 해당 사이트↗ 가이드라인을 보면서 설치할 수 있습니다. Brew 설치가 완료되었으면 사용하기전에 `update`를 진행합니다. 그리고 아래 명령어를 통해 mysql 관련 프로그램을 검색합니다. brew update brew search mysql 그 중에서 mysql을 설치하려고 합니다... 2024. 2. 27.
우선순위 큐와 힙의 차이를 알아보자. 이번 포스팅에는 스택, 큐, 힙 알고리즘 문제를 풀어본 궁금증으로 비슷한듯 다른 우선순위큐와 힙의 차이에 포스팅해보려고 한다. 먼저 결론적인 개념은 다음과 같다. 큐(Queue) : 먼저 들어오는 데이터가 먼저 나오는 선입선출(FIFO) 구조 우선순위 큐(Priority Queue) : 우선순위가 높은 데이터가 먼저 나가는 구조 힙(Heap) : 루트 노드에 최대값이나 최소값을 저장하고 있는 완전이진트리 Queue 큐 자료구조 관련 문제 : 트럭 관련 문제로 [백준]트럭↗ 문제와 [프로그래머스]다리를 지나는 트럭↗ 문제가 있다. 트럭 문제는 트럭들의 최대하중을 기준으로 최대 하중보다 크면 다리 큐(Queue)에 0을 추가(Push)하고 적으면 다음 트럭을 추가하는 문제이다. Push : 다리 하중을 버틸.. 2024. 2. 24.