본문 바로가기

전체 글82

[WEEK05~07] 복기와 공부한 것들 복기 지나가버린 일주일은 아쉬웠고, 다가올 일주일을 위해서 매번 마음을 다시 다졌다. 블로그에도 '글을 써야겠다.' 라는 마음을 항상 품고 있었지만 쌓여있는 할 일들과 채워나가야하는 공백들 속에서 글을 쓰는 일은 매번 뒷전으로 미뤄졌다. 5주차에서 7주차는 지난 4주와는 다르게 조금은 새로운 시도들을 해보고 싶었다. 공부방법이나 생활패턴에 조금씩 변화를 줘가면서 어떤 것이 더 좋은지 비교해보고 싶었다. 어떤 한 주는 답안을 보지 않고 혼자의 힘으로 코드를 짜보기 위해서 고군분투해보았고, 다른 한 주는 팀원들과 함께 코드를 짜는 경험을 해보았다. 생활패턴은 조금 더 건강하게 가지기 위해 잠을 조금 더 늘리거나 조금이라도 더 건강한 식단을 유지하기 위해 노력했다. 실력을 쌓아나가야할 것 같다. 힘 빼기 운동.. 2022. 11. 14.
[강연] The mind behind Linux _ Linus Torvalds ⬆️ One of the most important Software Headquarter 🤣 Linux와 Git을 만들어낸 Linus Torvalds, 그는 비전주의자도 아니고 돈에만 눈이 멀어있는 사업가도 아니었다. 기술을 사랑하고 당장 눈 앞에 있는 문제를 해결하려고 하는 진정한 Engineer 소프트웨어의 살아있는 전설이라고 불리어도 손색이 없는 그의 소박함과 진실됨 자신의 일에 대한 열정에 매료 되었다. Ted 강연 중 About himself My biggest exceptional quality was that I would not let go. I'm not a visionary. I do not have a five year plan. (그는 그가 비전주의자도 아니고 내향적인 사람이라 떳떳.. 2022. 10. 30.
[WEEK04] 다이나믹 프로그래밍 & 4주차 복기 다이나믹 프로그래밍 1. 특징 - 컴퓨터 연산속도의 한계 + 메모리 공간을 사용할 수 있는 데이터 개수의 제약 - 연산속도와 메모리 공간을 최대한으로 활용할 수 있는 효율적인 알고리즘이 필요 ⇒ 메모리 공간을 약간 더 사용하면 연산속도를 비약적으로 증가시킬 수 있음 ⇒ 동적프로그래밍 (≠ 동적할당) - 큰 문제를 작게 나누고 같은 문제라면 한번씩만 풀어 문제를 효율적으로 해결하는 알고리즘 - 주어진 문제를 나눌 때 부분 문제를 최대한 많이 이용하도록 나눈 다음, 주어진 부분 문제의 정답을 한번만 계산하고 저장해둔 뒤 다시 한번 이 부분 문제를 이용할 때에는 저장해둔 정답을 바로 산출하여 이용함으로써 속도를 향상시킴 다음 조건을 만족할 때 사용할 수 있음 - Overlapping Subproblems (겹.. 2022. 10. 30.
[WEEK03] 서로소 집합 자료구조 서로소 집합 자료구조 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 union, find 2개의 연산으로 조작할 수 있음 => union - find 자료구조라 부름 특징 - 서로소 집합 자료구조를 구현할 때 트리 자료구조를 이용하여 집합을 표현하는데 서로소 집합 정보 (합집합 연산)이 주어졌을 때 트리자료구조를 이용해서 집합을 표현하는 서로소 집합 계산 알고리즘은 다음과 같음 1) union(합집합) 연산을 확인하여 서로 연결된 두 노드 A, B를 확인 - A와 B의 루트 노드 A', B'를 각각 찾음 - A'를 B'의 부모노드로 설정 (B'가 A'를 가르키도록 함) 2) 모든 합집합 연산을 처리할 때까지 1)의 과정을 반복 - 일반적으로 find, union 연산을 활용하면 .. 2022. 10. 13.
[WEEK03] 위상정렬 Topology Sort 방향그래프의 모든 노드를 '방향성에 거스르지 않도록 순서대로 나열하는 것' 특징 - 정렬 알고리즘의 일종으로 순서가 정해져 있는 일련의 작업을 차례대로 수행해야할 때 사용할 수 있는 알고리즘 - 예를 들면 '선수과목을 고려한 학습순서 설정'을 들 수 있음 - 진입차수 (indegree) ? 특정한 노드로 '들어오는' 간선의 개수 - 위상 정렬은 여러 개의 답이 존재할 수 있음 - DAG(Directed Acyclic Graph)에서만 적용 DAG? 사이클이 발생하지 않는 방향 그래프 - 위상정렬 알고리즘은 두가지 해결책을 낸다는 특징이 있음 1. 현재 그래프는 위상정렬이 가능한지 2. 위상정렬이 가능하다면 그 결과는 무엇인지 알고리즘 진행과정 1. 진입차수가 0인 노드를 큐에 넣.. 2022. 10. 13.
[WEEK03] 최단경로 - 다익스트라 / 플로이드워셜 1. 다익스트라(Dijkstra) - 그래프에서 여러개의 노드가 있을 때 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단경로를 구해주는 알고리즘 - '음의 간선'이 없을 때 정상적으로 작동 - 현실세계의 길에서는 음의 간선이 표현되지 않으므로 다익스트라 알고리즘은 실제 GPS 소프트웨어의 기본알고리즘으로 채택됨 구현과정 1. 출발 노드를 설정 2. 최단거리 테이블을 초기화 3. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택 4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단거리 테이블을 갱신 5. 위의 과정에서 3번과 4번을 반복 - '각 노드에 대한 현재까지의 최단거리' 정보를 항상 1차원 리스트에 저장하며 리스트를 계속 갱신 - 매번 현재 처리하고 있는 노드를 기준으.. 2022. 10. 11.