본문 바로가기

반응형

IT

(30)
[Python] 백준(BOJ) - 1260 DFS와 BFS (인접 리스트) 이번에는 지난 번에도 풀었던 백준 1260번의 DFS와 BFS다. 지난 번에 파이썬의 딕셔너리 자료형으로 풀어서 332ms의 실행 시간이 나왔는데, 이번에는 전통적인 C/C++ 스타일로 인접 리스트를 만들어서 풀어보았다. 과연 결과는? 소스 코드 #BOJ 1260 DFS와 BFS - Adjecent Index from collections import deque import sys input = sys.stdin.readline def dfs(_graph, _start): visit = list() s = list() s.append(_start) while s: node = s.pop() if node not in visit: visit.append(node) if _graph[node] == None..
[Python] 백준(BOJ) - 1260 DFS와 BFS (Dictionary) 이번 문제는 DFS와 BFS 기초이다. 그러나 정답률은 30.604%로 꽤나 저조한데... 그 자세한 이유는 실제로 풀어보면 알겠지만 생각보다 난해한 부분이 생긴다. 그러나 기초는 기초일 뿐. Python3로 풀면 특히 쉽다. 보통은 Node로 그래프를 그려서 풀겠지만, 이번에는 Python의 Dictionary 자료형을 활용하여 해결해보았다. 한 번 바로 살펴보도록 하자. 소스 코드 #BOJ 1260 DFS와 BFS from collections import deque import sys input = sys.stdin.readline def dfs(_graph, _start): visit = list() s = list() s.append(_start) while s: node = s.pop() if..
[Python] 백준(BOJ) - 1931 회의실배정 필자는 거의 항상 코딩 테스트, 혹은 알고리즘 문제 풀이를 파이썬으로 한다. 대체로 코딩 테스트는 C++로 하라고 하지만... 필자가 일하고자 하는 직무가 인공지능, 빅데이터 쪽이기도 하고, C, C++은 임베디드 하면서도 자주 접하기 때문에 지식의 반경을 넓히고자 하는 욕심도 있기 때문이다. 이번 알고리즘 풀이 첫 문제는, 백준 온라인 저지의 1931번 문제 회의실 배정이다. 이 문제는 그리디 알고리즘의 대표격 문제이지만, 정답률은 28% 정도로 조금 낮은 편이다. 그 이유는 바로 끝나는 시간과 시작하는 시간이 겹칠 수 있다는 특수성 때문에 그럴 것이다. 지난 5567번 문제에서도 그랬지만 이 포스트에서 그리디 알고리즘에 대한 이론 설명은 하지 않겠다. 이는 따로 "이론 카테고리"에서 정리할 예정이다...
[Python] 백준(BOJ) - 5567 결혼식 필자는 거의 항상 코딩 테스트, 혹은 알고리즘 문제 풀이를 파이썬으로 한다. 대체로 코딩 테스트는 C++로 하라고 하지만... 필자가 일하고자 하는 직무가 인공지능, 빅데이터 쪽이기도 하고, C, C++은 임베디드 하면서도 자주 접하기 때문에 지식의 반경을 넓히고자 하는 욕심도 있기 때문이다. 이번 알고리즘 풀이 첫 문제는, 백준 온라인 저지의 5567번 문제 결혼식이다. 정답률도 41% 정도의 쉬운 문제지만, 이 문제를 처음으로 올리는 이유는, 필자가 처음으로(부끄럽다...) 랭크에 올라봤기 때문이다. 한 번 바로 살펴보자. 소스 코드 #BOJ 5567 결혼식 (Graph) import sys input = sys.stdin.readline n = int(input()) m = int(input()) ..
[Python] 더블 링크드 리스트 (이중 연결 리스트) 싱글 링크드 리스트를 배웠으면 더블 링크드 리스트를 빼먹을 수 없다. (만약 지난 싱글 링크드 리스트가 궁금하다면? 2019/11/29 - [IT/자료구조] - [Python] 싱글 링크드 리스트 (단순 연결 리스트)) 이 또한 워낙 방대한 자료가 많지만, 추후 그래프나 트리 구현을 할 때 제반 지식이 될 수 있도록 꼭 구현해보는 것을 추천한다. 기초적인 지식 1. 시간복잡도 Double Linked List 최선 최악 삽입 O(1) O(1) 삭제 O(1) O(1) 탐색 O(k) O(k) [인덱스 탐색 시] O(N) [값 탐색 시] 이전 포스트였던 싱글 링크드 리스트와는 다른 점이 있다면 탐색이다. 그리고 지난 싱글 링크드 리스트와 함정 또한 공유한다. 2. 장점 싱글 링크드 리스트와 모든 장점을 공유한..
[Python] 싱글 링크드 리스트 (단순 연결 리스트) 아마 자료구조를 공부하면 처음 구현하게 될 싱글 링크드 리스트. 워낙 자료도 방대하고 기구현된 소스코드가 많지만, 그만큼 기초는 중요하기에 직접 구현하면서 지식을 익혀보는 것이 낫다. 개인적인 생각이지만, 아주 기초적인 노드의 활용 방식을 몸소 익힐 수 있다는 점만으로도 단순 연결 리스트의 구현은 해볼 가치가 있다고 생각한다. 기초적인 지식 1. 시간복잡도 Single Linked List 최선 최악 삽입 O(1) O(1) 삭제 O(1) O(1) 탐색 O(k) O(N) ※ 단, 함정 있음. (아래 단점 항목 참고) 2. 장점 삽입과 삭제가 O(1)에 이루어진다. 삽입과 삭제를 할 때마다 동적으로 링크드 리스트의 크기가 결정되므로 전통적인 배열(Array)에 비해 처음부터 큰 공간을 할당할 필요가 없어진다..

반응형