본문 바로가기

반응형

전체 글

(72)
백동원 포트폴리오(22.11.10. 기준) 보호되어 있는 글입니다.
[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..
[개념/이론] 주요 딥러닝 프레임워크 비교 1. 서 론 Machine Learning, Deep Learning에서는 매우 많은 종류의 프레임워크끼리 전국시대를 맞이했고, 그 중 승자라고 한다면 가장 많은 컨트리뷰터와 Star, Fork 수를 지닌 Google의 Tensorflow가 압도적 1위일 것이다. 하지만 CS 세계에서 가장 많은 사람들이 Python, 혹은 Java, 혹은 C++을 사용한다고 해서 그 언어가 타이틀을 가져갈 수는 있을지언정 타이틀을 가져갈 수는 없을 것이다. 딥러닝 프레임워크도 크게 다를 것은 없다. 그렇다면 대표적인 4가지의 딥러닝 프레임워크의 비교를 해보도록 하겠다. (이것은 지극히 개인적이며 주관적인 견해가 포함되어 있다.) 2. 프레임워크 2-1. 텐서플로우 - 구글이 만들었고, 사용자가 효율적인 구현을 위해 C+..
[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)에 비해 처음부터 큰 공간을 할당할 필요가 없어진다..
CS 블로그를 시작하는 이유 군 생활하던 갑자기 어느 날 컴퓨터공학에 마음이 꽂혔다. 이런 건 보통 이유가 없다. 그런데 이 블로그를 대학 졸업할 즈음에 다다라서 시작하게 된 데에는 이유가 있다. 정리를 해야겠다는 생각이 강하게 들어서였다. 필자는 전기공학과 출신이고, 임베디드로 CS를 처음 접했기 때문에 사실 인터넷에 내가 공부했던 미약한 지식들을 늘어놓는 것이 굉장히 겁났다. 그래서 최신까지도 소스코드들은 내 컴퓨터 SSD 안에서, 내 외장하드 안에서만 잠들어 있는 것들이 많다. 분명 2~3년 후, 아니 어쩌면 그보다도 더 짧은 1년 후만 되어도 내가 그 당시 힘들게 짰던 코드는 볼썽사납고 하찮은(?) 코드가 될 것만 같아서, 내 자신에게 부끄러울 것 같아서 올리지 못했다. 하지만 이제 어느 정도 경험을 하다 보니, 컴퓨터 포맷..

반응형