알고리즘

파이썬 개발

[Python] 분리 집합, Union-Find에 대해서 알아보자!

분리집합(Union-Find)은 그래프 알고리즘 중 하나로 코딩 테스트 킬러 문제로 주로 나오는 알고리즘입니다. 서로소 집합 일단 유니온 파인드 알고리즘을 알기 전 disjoint sets을 먼저 이해해야 하는데요, 쉽게 설명하면 공통 원소가 없는 두 집합을 뜻합니다. 아래 그림을 보시면 왼쪽은 서로소 집합을 나타내고 오른쪽은 공통된 7이라는 원소 때문에 서로소 관계가 깨지게 됩니다. 따라서 왼쪽은 서로소 집합, 오른쪽은 서로소 집합이 아니게 되는 것이죠. Union-Find는 서로소 집합 자료구조를 만들 수 있습니다. 집합에서 노드들을 합치고(Union), 부모를 찾아(Find) 서로소 집합을 찾아내는 알고리즘인 것이죠. 한마디로 DSU(Disjoint Sets Union) 자료구조를 만들어 내는 과정..

파이썬 개발

[Python] 힙 자료구조인 heapq에 대해 알아보자!

힙의 개념 힙은 완전 이진트리로 구성된 자료구조이다. 우선순위 큐를 위해 만들어진 자료구조이다. 힙 자료구조로 우선순위 큐를 구현할 때 삽입 삭제 모두 O(logN) 연산을 가진다. 최소 힙: 부모 노드의 값이 자식노드의 값보다 항상 작은 힙 최대 힙: 부모 노드의 값이 자식노드의 값보다 항상 큰 힙 위 사진과 같이 항상 완전 이진트리로 구성되어 최소 최대 값을 빠르게 찾아낼 수 있도록 설계되어있다. heapq 모듈 파이썬에선 heapq 모듈을 이용하여 최소 힙과 최대 힙 모두 구현할 수 있다. heapq 메서드 heappush(heap, item) 힙 불변성을 유지하면서 item 값을 heap으로 푸쉬한다. heapq.heappop(heap) 힙 불변성을 유지하면서, heap에서 가장 작은 항목을 po..

대외 활동/정보

[SW 마에스트로] 14기 대비 코딩테스트 문제 유형 정리 (11기, 12기, 13기)

소프트웨어 마에스트로 14기 준비하면서 찾아본 코딩 테스트 문제 유형 정보 정리 공식적인 정보가 아닌 타 블로그에서 발췌해 온 정보입니다. 14기부터는 WEB 유형 문제가 사라지고 알고리즘 유형과 SQL 유형으로만 평가하게 됩니다. 대부분 블로그 후기에선 1차는 실버 상위 문제가 다수이고, 2차에선 골드 문제(분리 집합, 다이내믹 프로그래밍) 또는 실버 문제(구현, 탐색)로 구성되게 됩니다. 알고리즘 문제유형 정리 자료구조 구현 완전탐색 (Brute-Force) 이분탐색 (Binary Search) 조합, 순열 정렬 라인 스위핑 그래프 탐색 (DFS, BFS) 분리 집합 (Union-Find) 다이나믹 프로그래밍 (DP) SQL 문제유형 정리 AND OR BETWEEN AND GROUP BY DATEDI..

파이썬 개발

[Python] 파이썬 자료구조의 꽃 deque에 대해 알아보자!

최근 알고리즘 테스트 공부를 위해서 파이썬을 꽤나 자주 이용하는데, 문제에서 빈번하게 사용되는 deque에 대해서 알아봅시다! Deque, 왜 쓰나요? 먼저 주 언어가 Javascript였던 제가, 파이썬으로 알고리즘을 하게 된 가장 큰 이유가 바로 deque의 유무였습니다. 자바스크립트에서 후입선출 방식의 Queue나 양쪽에서 삽입 삭제가 가능한 Double-ended Queue 같은 자료구조를 구현하기 위해선, 링크드리스트를 거의 필수로 사용해야 했습니다. 예를 들어 1, 2, 3이 있는 배열을 큐 방식으로 넣고 뺀다고 생각해 봅시다. 1, 2, 3에서 가장 먼저 들어왔던 1의 값만 뺀다고 생각 해봅시다. 그럼 1을 빼기 위해서, 뒤에 있는 모든 index들이 한 칸 앞으로 와야 하는 귀찮은 일이 발..

CS 공부/기초 알고리즘

[Python] DFS와 BFS

알고리즘 공부를 하는 중에 그래프 탐색 파트를 공부하기 시작해서 짚고 넘어가는 것이 좋겠다고 생각하여 DFS와 BFS를 알아보고, 파이썬으로 구현까지 해본다. DFS (Depth-First Search) 깊이 우선 탐색이라고 부르고 그래프에서 깊은 부분을 우선 탐색하는 알고리즘이다. 갈 수 있는 한 맨 밑까지 탐색하여 리프노드(맨 아래 노드)를 방문하고, 이전 갈림길에서 선택하지 않은 노드들을 방문하는 식으로 탐색한다. 방문 위치를 기록 하는 스택을 이용하여 해결 할 수 있다. 또는 재귀로 해결 할 수 있다. 스택 방식 동작 과정 탐색 시작 노드를 스택에 삽입하고 방문 배열에 방문 했다고 표시한다. 스택의 최상단 노드에 방문 하지 않은 인접 노드가 있으면 해당 노드를 스택에 넣고 방문 처리를 한다. 만약..

백준 알고리즘/Lang-Python

[백준/python] 2493 탑

https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 사용언어 : python 알고리즘 : 자료 구조, 스택 Solved.ac Tier : Gold V python 코드 1. 문제 정리 이 문제는 시간이 1.5초이고 주어지는 탑의 개수가 50만개이기 때문에 시간 복잡도가 O(N^2)를 넘어서면 시간 초과가 발생 한다. 따라서 문제를 해결 할 때 탐색 하는 것을 빼야 했다. import collections import sys from collect..

백준 알고리즘/Lang-Python

[백준/python] 2504 괄호의 값

https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X www.acmicpc.net 사용언어 : python 알고리즘 : 구현, 스택, 자료 구조 Solved.ac Tier : Silver I python 코드 1. 문제 정리 어렵지 않은 문제라고 생각하고 접근 했으나, 꽤나 해결 하는데 오래 걸린 문제이다. 사람 머리로 하면 쉬운데... 구현 하려니 머리가 너무 복잡해졌다. 어느 부분에서 곱셈을 하고, 덧셈을 해야 할지 생각 해야 하는 문제였는데, 아이패드로 몇 번 그려보..

백준 알고리즘/Lang-Python

[백준/python] 1935 후위 표기식2

https://www.acmicpc.net/problem/1935 1935번: 후위 표기식2 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이 www.acmicpc.net 사용언어 : python 알고리즘 : 자료구조, 스택 Solved.ac Tier : Silver IV python 코드 1. 문제 정리 후위 표기식, 전위 표기식은 전공자가 아니라면 듣기 어려운 식들이다. 후위 표기식은 컴퓨터가 사용하는 연산 방법으로, 왼쪽에서 오른쪽으로 표기된 순서대로 처리하면 결과가 올바르게 나오는 후위 표기법을 사용한다. 스택을 사용하여 원래의 중위 표기식으로 변..

Jongung
'알고리즘' 태그의 글 목록