본문 바로가기

전체 글27

[Algorithm] 다익스트라 알고리즘(Dijkstra’s Algorithm) 1. 백준 1916번 문제 2. 다익스트라 알고리즘(Dijkstra’s Algorithm) 1. 백준 1916번 문제 오늘도 알고리즘 공부를 위해 백준 문제에 도전했는데, 1916번 문제인 "최소비용 구하기"에 도전했습니다. 처음에는 간단하게 DFS를 이용하려 했지만, 최대 도시의 수가 100,000개로 주어지고 시간 제한이 0.5초라는 점을 고려하니 다른 접근 방식이 필요하다고 느꼈습니다. 문제에서 어떤 간선에는 큰 값이 들어갈 수도 있고 작은 값이 들어갈 수도 있다는 점을 고려하면, 결국에는 모든 경우를 탐색해야 한다고 생각했습니다. 그러나 시간 제한이 짧기 때문에 조건을 걸어주어 조기에 탐색을 종료할 수 있도록 백트래킹을 이용하여 코드를 작성했습니다. import sys sys.setrecursio.. 2024. 4. 11.
[Git & GitHub] Branch와 Merge 과정 1. Branch 개념 2. Clone 및 Merge 과정 3. reset, revert 사용 4. git name, email 변경 오늘은 원격 저장소의 모든 내용을 Clone을 통해 가져와 특정 Branch의 내용을 수정하고 Merge하는 과정에 대해 말씀드리겠습니다. 1. Branch 개념 일련의 과정들을 말하기에 앞서 Branch란 무엇인지, 왜 사용해야 하는지 간단하게 말씀드리고 넘어가도록 하겠습니다. Branch란 "동일한 소스 코드에서 파생된 독립적인 개발 라인" 이라고 말할 수 있습니다. 여기서 중요한 포인트는 "독립적인" 이라는 키워드입니다. 보통 프로젝트를 진행하게 되면 여러 명이 함께 작업을 진행하게 되는데, 이때 각 개발자는 자신이 생성한 브랜치에서 작업을 수행하고, 이후 변경 사항.. 2024. 2. 26.
[CS] CRLF vs LF 1. 사건 개요 2. 운영체제별 개행 표현 3. 해결 및 느낀점 1. 사건 개요 프로젝트를 깃랩에서 가져와 VSCode에 클론한 후 도커를 사용하여 이미지를 빌드하고 컨테이너를 생성하여 실행하는 과정에서 문제가 발생했습니다. 이미지와 컨테이너는 build 및 create 명령을 사용하여 성공적으로 생성되었지만, 컨테이너를 실행하면 잠시 실행된 후 Exited(1) 상태가 되며 즉시 종료되었습니다. 이유가 궁금해 Logs를 확인해 보니 "exec ./run.sh: no such file or directory" 라는 문구가 있었습니다. (1주일 전에도 시도했지만 오류를 못찾아서 중도포기하고 다른거하다가 재도전 하였습니다...) 오류 메시지 자체는 "run.sh" 파일을 찾을 수 없다는 것으로 해석이 간단했.. 2024. 2. 20.
[Algorithm] 이진 탐색(Binary Search) 1. 이진 탐색 개념 2. 이진 탐색 동작과정 3. 백준 10815번 4. 번외 (list vs set) 1. 이진 탐색 개념 이진 탐색은 오름차순으로 정렬된 배열을 반복적으로 반으로 나누어 내가 찾고자 하는 값이 선택될 때까지 탐색하는 알고리즘입니다. 또한, 이진 탐색 알고리즘은 입력 데이터가 많거나(1000만 단위 이상) 탐색 범위의 크기가 매우 넓을 때 효과적으로 문제를 해결 할 수 있습니다. (반드시 정렬이 되어 있어야합니다.) 2. 이진 탐색 동작 과정 다음과 같이 오름차순으로 정렬 되어있는 배열이 있다고 가정해 보겠습니다. 이진 탐색은 배열을 반복해서 반으로 나누기 때문에 초기값, 끝값, 중간값이 필요합니다. 이 값들을 그림에 표시해보면 이런식으로 나타낼 수 있습니다. 배열의 초기 인덱스와 마.. 2024. 1. 23.
[자료구조] 힙(heap) 1. 힙(heqp)의 개념 및 규칙 2. heapq 함수 활용하기 3. 힙(heap) 정렬 4. 최대 힙(heap) 1. 힙(heqp)의 개념 및 규칙 앞에서 큐는 데이터가 들어온 순서대로 나가는 선입선출(First In First Out)의 자료구조라고 공부했습니다. 그런데 들어가는 데이터에 우선순위를 매겨서 들어간 순서와 관계없이 나갈 때 우선순위가 높은 데이터가 먼저 나가는 자료를 "우선순위 큐" 라고 합니다. 힙(heap)은 이러한 우선순위 큐를 구현한 자료구조 입니다. 힙은 다음과 같은 규칙을 지닌 이진트리입니다. 1. 노드를 왼쪽에서 오른쪽으로 하나씩 빠짐없이 채워나간다. 2. 최소 힙은 부모 노드가 자식 노드의 값보다 작거나 같아야한다. (최대힙은 부모노드가 자식 노드의 값보다 크거나 같다... 2024. 1. 22.
[자료구조] 스택(Stack)과 큐(Queue) 1. 스택(Stack) 2. 큐(Queue) 3. 덱(Deque) 스택(Stack)과 큐(Queue)는 컴퓨터의 가장 기본적인 자료구조 중 하나입니다. 데이터를 임시 저장하기 위해 사용되는 자료구조이며, 데이터를 입력하고 출력하는 방향이 정해져 있다는 점이 서로 비슷합니다. 스택(Stack) 스택은 LIFO(Last In, Fisrt Out) 형태의 자료구조로 가장 마지막에 입력된 데이터가 가장 먼저 제거되는 구조 입니다. 흔히 박스는 아래에서부터 위로 차곡차곡 쌓고 박스를 치울 때는 위에 있는 박스부터 내리는 것과 같습니다. 파이썬으로 스택을 이용할때는 리스트 자료형을 사용하여 구현합니다. append() 메소드로 리스트의 가장 뒤의 데이터를 push하고, pop() 메소드로 리스트의 가장 뒤의 데이터.. 2024. 1. 18.
[Algorithm] 병합정렬 백준 2751번 문제를 풀다가 시간초과가 나와서, 알고보니 여러 정렬 방법 중 시간 복잡도가 O(nlogn)인 방법을 사용해야 풀 수 있다는 것을 뒤늦게 알게 되었습니다. 그래서 그 중 하나인 병합 정렬에 대해 설명하려 합니다. 먼저 2751번의 문제는 다음과 같습니다. 문제 자체는 상당히 간단합니다. 문제 하단에 제시된 힌트도 있었습니다. 파이썬을 사용하시는 분들은 이 문제를 라이브러리를 사용해서 아주 간단하게 풀 수 있습니다. N = int(input()) arr=[] for i in range(N): x=int(input()) arr.append(x) arr.sort() for i in arr: print(i) 이런식으로 손 쉽게 문제를 해결할 수 있습니다. 하지만 저는 내장된 정렬 함수가 아니라 .. 2024. 1. 16.
[Docker] 컨테이너 라이프사이클 1. Docker Container Life Cycle 2. 컨테이너 실행방법 3. 컨테이너 관련 명령어 Docker Container Life Cycle 컨테이너 실행방법 1. run 명령어로 컨테이너 생성 및 시작 docker run [image] 2. create 명령어로 컨테이너를 먼저 만든 후 start 명령어로 실행 docker create [image] #컨테이너 생성 docker start [container] #컨테이너 시작 컨테이너 관련 명령어 실행중인 컨테이너 상태 확인 ps 전체 컨테이너 상태 확인 ps -a 컨테이너 상세 정보 확인 inspect [container] 컨테이너 일시 중지 pause [container] 컨테이너 재개 unpause [container] 컨테이너 종료.. 2024. 1. 14.