알고리즘/기본 개념 4

[Python] 선택 정렬 & 삽입 정렬

*해당 포스팅은 이것이 코딩 테스트다 with python(나동빈 지음) 교재를 공부하며 작성한 글입니다. 안녕하세요! 오늘은 정렬 알고리즘 중 선택 정렬과 삽입 정렬에 대해 알아보겠습니다. 정렬이란 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말합니다. 문제 상황에 적절하지 않은 정렬 알고리즘을 이용하면 프로그램이 비효율적으로 동작하여 필요 이상으로 시간을 많이 소요하게 됩니다. 따라서 상황에 맞는 적절한 정렬 알고리즘을 사용하는 것이 중요하다고 할 수 있습니다. 정렬 알고리즘에 대해 공부하기 전에 알고리즘의 효율성을 나타내는 척도인 시간 복잡도에 대해 알아보겠습니다. 시간 복잡도는 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지를 의미합니다. 알고리즘의 성능을 평가할 때 최악의 ..

[Python] BFS(Breadth First Search) 알고리즘

*해당 포스팅은 이것이 코딩 테스트다 with python(나동빈 지음) 교재를 공부하며 작성한 글입니다. 안녕하세요! 오늘은 탐색 알고리즘 중 하나인 BFS 알고리즘에 대해 알아보겠습니다. BFS란 'Breadth First Search'의 약자로 너비 우선 탐색이라고 불리며, 그래프에서 가까운 부분을 먼저 탐색하는 알고리즘입니다. BFS 알고리즘은 주로 최단거리를 구할 때 사용합니다. BFS 알고리즘을 이해하기 위해서는 큐 구조와 그래프의 구조에 대해 알아야 합니다. 그래프에 대해서는 이전 DFS 알고리즘 포스팅에서 설명드렸으니 넘어가고 큐 구조에 대해 설명드리겠습니다. 큐(Queue) 큐는 선입선출(First In First Out)의 구조입니다. 큐의 구조는 편의점에서 물품을 진열하는 방식과 같습..

[Python] DFS(Depth First Search) 알고리즘

*해당 포스팅은 이것이 코딩 테스트다 with python(나동빈 지음) 교재를 공부하며 작성한 글입니다. 안녕하세요! 오늘은 DFS 알고리즘에 대해 알아보겠습니다. DFS란 'Depth First Search'의 약자로 깊이 우선 탐색이라고 불리며, 그래프에서 깊은 부분을 먼저 탐색하는 알고리즘입니다. DFS 알고리즘은 주로 경우의 수에 대해 알고 싶을 때 사용합니다. DFS 알고리즘을 이해하기 위해서는 먼저 스택 구조와 그래프의 구조에 대해 알아야 합니다. 1. 스택 (Stack) 스택은 선입 후출(First In Last Out)의 구조입니다. 스택은 박스 쌓기에 비유해 볼 수 있습니다. 박스를 아래에서 위로 차곡차곡 쌓은 후에 박스를 치우기 위해서는 위에서부터 치워야 합니다. 그림으로 보면 다음과..

[Python] 그리디(Greedy) 알고리즘

*해당 포스팅은 이것이 코딩 테스트다 with python(나동빈 지음) 교재를 공부하며 작성한 글입니다. 안녕하세요! 오늘은 그리디 알고리즘에 대해 알아보겠습니다. 그리디 알고리즘이란 단어 그대로 탐욕법이라고 할 수 있습니다. 코딩에서 탐욕적이라는 말은 '현재 상황에서 지금 당장 좋은 것만 고르는 방법' 을 의미합니다. 그리디 알고리즘은 간단하고 유형이 다양하여 암기할 필요가 없지만 문제를 풀 때 창의력이 조금은 필요한 유형의 알고리즘입니다. 즉, 문제가 주어졌을 때 '어떠한 방식이 현재 상황에서 최선인가' 를 빨리 떠올리는게 중요합니다. 최단거리를 구하는 다익스트라 알고리즘의 같은 경우도 그리디 알고리즘에 해당하므로 그리디 알고리즘에 대해 잘 이해해 두는 것이 좋겠습니다. 물론 그리디 알고리즘이 모든..