전체 글 58

[Robot Vision System]

Assignment 1 실행 순서 1. 환경 세팅 # firstly, install ROS Melodic (This assignment does not work on M1, M2 macbooks.) # Second, install opencv # 내 경우엔 """ $ python2 >>> import cv2 >>> cv2.__version__ '4.2.0' """ $ echo "export ROS_MASTER_URI=http://localhost:11311 " >> ~/.bashrc """ 만약 ping 연결이 안된다면, bashrc 의 ROS_HOST ip를 ifconfig 후 나오는 것으로 교체. """ $ sudo apt update && sudo apt upgrade -y $ sudo apt in..

[C++] 코딩 테스트 대비 - Dynamic Programming 문제 접근법 정리

동적 계획법 정의 동적계획법(Dynamic Programming) 개념 동적계획법이란, 큰 문제에 대한 해답을 얻기 위해 해당 문제를 크기가 더 작은 문제들로 쪼개어, 작은 문제들을 먼저 해결한 뒤 그 결과들을 이용해서 원래의 큰 문제를 해결하는 기법을 의미한다. 정리하면, Dynamic Programming에서의 핵심은 문제를 잘개 쪼개 조그마한 단위에서의 해결 방법을 구해(점화식) 그것이 최종적인 솔루션과 같은 형태로 구성될 수 있도록 설계하는 것이다. 동적계획법 문제풀이의 예시 - 점화식 동적계획법은 점화식만 구하면 된다. 아주 간단한 피보나치 수열의 경우로 예를 들어보자. n-1번째 수와 n-2번째 수의 합이 n번째 수가 되므로, 재귀를 이용하거나 배열에 저장하는 형태로(즉 초기에 답을 구해놓은 ..

[C++] 코딩 테스트 대비 - 그래프 이론, 그래프 탐색, 최단경로 문제 접근법 정리

그래프 탐색 개념 및 유형 그래프 탐색 문제 기본 해결 방법 문제가 NxM 형태의 격자 형태를 띄거나, 노드 & 간선의 형태로 그래프 및 트리의 형태를 갖게 되는 경우 그래프 탐색 및 최단경로 탐색 알고리즘을 문제 해결 알고리즘으로 염두에 두어야 한다. 관련 유형 문제로는 아래와 같은 예시를 들 수 있다. 프로그래머스 코딩테스트 페이지를 참고하자. 알고리즘 Breadth First Search를 통해서는 노드를 탐색할 때 같은 깊이의 노드들을 같이 탐색하므로(큐를 이용하기 때문), answer을 탐색할 때 최소깊이/최소간선 수 를 보장하지만, 그래프의 깊이가 깊고 큰 그래프의 경우 공간복잡도가 커질 우려가 있다. 코딩테스트 선에서는 크게 고려할 필요는 없다. 격자 형태를 띄는 문제에, 시작 지점으로부터 ..

[C++] 백준 1325 효율적인해킹 - 연결된 노드 개수 구하는 방식 실패원인 분석 및 해결, 반례

문제 설명 https://www.acmicpc.net/problem/1325 A->B 라는 방향이 주어지는 그래프이며, 이 관계에서는 B가 A를 신뢰한다, B 입장에서 A를 해킹할 수 있다, 즉 B가 기준이 되는 문제이다. B 기준에서 연결된 노드의 개수가 몇 개인가, 노드별로 구분해서 카운트하고 정렬하는 문제이다. 방향 그래프 + 탐색 + 정렬 의 간단한 응용문제이나, 기계적으로 문제들을 풀었다면 사소한 부분들에서 헷갈리기 쉬운 문제이다. 문제풀이 시도 1 도착지점의 노드가 중요한 문제이므로, A B 라는 인풋이 주어졌을 때, A를 기준으로 graph를 그리지 않고, B를 기준으로 그래프를 그렸음(push_back을 거꾸로 했다는 의미) B 기준에서 연결된 노드의 개수를 세는 문제와 동일하다. B 기준..

[c++] 백준 2294 동전2 - dp 점화식 구상 실패 및 시간복잡도 분석 이후 문제풀이

문제 설명 https://www.acmicpc.net/problem/2294 Dynamic Programming의 정석과도 같은 문제 유형 중 하나이다. 주어진 동전의 가치로 목표 가치를 달성하기 위해 필요한 최소의 동전 개수를 계산하기 위해 다이나믹프로그래밍으로 접근해야 한다. 문제에 따라서 완전탐색 등의 다른 방식으로도 접근이 가능하나, 해당문제는 조건에 의해 시간복잡도를 계산해서 제한 시간 안에 계산이 가능한지 확인한 후, 완전탐색으로는 불가능하다는 점을 인식해야 한다. 문제 풀이 시도 및 문제점 고찰 첫 번째 아이디어: 목표 가치(ex. 15)까지의 크기를 갖는 배열을 생성한 후, 0부터 해당 목표 index까지의 최소 동전 개수를 하나씩 계산해서 배열을 채워나가는 방식을 구상하였으나, 주어진 동..

느려짐에 대한 반성

나는 지금 매우 느리게 움직이고 있다. 무엇을 목표로 하고 공부할 지 고민하기로 한 지 몇 주가 지났는지 모르겠다. 7월은 약간의 휴식과 코딩테스트를 위한 기초 문제풀이를 진행했고, 8월은 본격적으로 근로장학을 시작했고 조금은 맹목적으로 코딩테스트 대비 문제풀이를 진행했다. 그 전부터 조금씩 고민을 계속해왔지만, 집중하지 못했다. 8월말이 되어서야 나의 어떤 능력으로 경제활동을 할 수 있을지 고민했지만, 여전히 주의가 흐트러졌었다. 쉽게 다른 곳으로 눈을 돌리게 되었다. 그러고는 벌써 9월의 절반이 지나갔다. 고민하기 싫었다. 대학원으로 진학하며 이런 고민들을 유예하고 싶었다. 나는 지금까지 진행해본 프로젝트를 내 손으로 제대로 완성시켜본 적이 없었다. 두렵다. 허황된 자신감만 있는건 아닌지. 결국 아직..

쉽진 않겠지만 그래도 우리는 조금씩 성장하고 있다.

성장하고자 하는 의지가 있다면 우리는 끝끝내 성장하게 될 것인가. 끊임없이 분투하고 고뇌하는 것이 아니더라도, 잔잔하고 큰 변화없는 일상적인 삶 속에서 조용히 아니 더욱 가만히 누워서라도 사색하며 정리하는 시간도 사람을 회복시키고 성장시키며 마침내 더 나은 존재로의 방향으로 한 발짝 나아가게 할 수 있을까. 아니면, 이러한 긴 정적인 시간이 지나 무엇인가 일렁이던 것이 가라앉으면, 조금은 익숙하면서 조금은 어색한 공간, 아니면 아예 새로운 공간으로 찾아가 새로운 리듬에 몸을 맞춰보며 새롭게 설레어보고, 이런저런 떠오르는 영감들로 머리 속을 가득 채우며, 과거의 시간들 속에서 벗어나 새로운 미래를 그려보며 또 한 발짝 나아갈 수 있게 될까. 한 사람이 가지고 있는 '가치'라는 것은 어떻게 증명될 수 있을까..

8월 8일 기록적인 폭우로부터의 반성, 그리고 대통령실(추가)

아직 나는 직접 경험하기 전까지는 어떠한 상황을 정확히 이해하고 공감하는 단계에 이르지는 못했다. 집중호우, 태풍, 지진 등 인명피해를 동반하는 기록적인 자연재해에 대한 뉴스를 접할 때마다 나는 별다른 반응을 하지 않았다. 직접 경험하지 않았기 때문이다. 직접 피해를 입지 않았기 때문이다. 나는 이기적이었다. 매 순간 어디에서는 새로운 생명이 태어나고, 알지 못하는 사람들이 생을 마감한다는 글을 본 적이 있다. 통계자료였다. '1초마다 어쩌구...' 하는. 어떤 목적의 통계자료였는지는 기억나지 않는데, 나는 이 글을 보고 그만, 생의 시작과 마감에 대한 그 무게감과 소중함을 잃어버렸다. 긍정도 부정도 아닌, 가벼운 마음을 가져버리고 만거다. 선택적 공감이라고 하던가? 용어에 대해서는 조금 더 알아보아야겠..

삶을 살아가는 나름 웃긴 방식

하루하루를 지내다 보면, 문득 나는 로봇처럼 삶을 살고 있는 것이 아닌가 하는 생각, 오히려 로봇이 되고 싶다고 느끼고 있는 것이 아닌가 하는 생각이 든다. 내가 로봇이라면 과제들을 잘 스케줄링해서 척척 하나씩, 시간도 효율적으로 보낼 수 있을 테니까. 처음부터 로봇이 되고 싶다고 느낀 것은 아니었을 것이다. 해야 하는 일들에 치여 우선순위를 정하고 하나씩 해나가는 행위가 조금씩 벅차 왔던 순간부터, 해야 하는 일들을 어느 정도 끝내고 난 뒤 찾아오는 여유에 무엇을 하면서 시간을 보낼지 몰라 혼란스러웠던 순간, 어색했던 혼란스러움을 잠재우기 위해 또 어디선가 해야 할 일들을 찾았던 순간, 이 패턴이 어느샌가 깊숙이 내 습관으로 자리 잡게 되어버린 순간까지. 마치 종이 위에 잉크가 떨어져 지우기 힘들 정도..

나는 매일 부지런한 사람이 되겠다고 다짐한다.

정말 꾸준한 습관은 사람을 변화시킬 수 있을까? 습관이란 것은, 어떠한 목표를 위해 노력하는 것일 수도 있고, 무엇이 좋아서 계속하다 보니 습관이 된 것일 수도 있다. 그중 제일 피해야 하는 것은, 바람직하지 않다고 느끼면서도 무의식적으로 지속하는 습관이다. 심해지면 '중독' 이 되는 것이 아닐까. 아침마다 눈을 뜨기 위해서 핸드폰을 부여잡고 SNS 눈팅을 하며 잠을 깨는 습관이 싫었다. 시시콜콜한 잡글을 읽으면서 눈을 비빌 바에, 한껏 정제되어 있고 수준이 있는 책의 글귀들을 읽자고 머리맡에 두었지만 소용이 없었다. 그렇게 나는 SNS를 눈팅하는 습관을 무의식적으로 계속 지속했었다. 결국 그것은 아침에 눈을 뜨는 것 이상으로 나를 옭아매기 시작했고, 점점 핸드폰을 부여잡는 시간이 늘어갔다. 한 게시글을..

내가 지금 할 수 있는 것

할 수 있는게 없다. 아니 할 의지가 없다고 하는게 더 맞는 표현일까? 살아 숨쉬는 매 순간마다 자유의 소중함을 절실히 느낄 수 있는 이곳에선 내 의지를 펼칠 수 있는 기회는 많지 않다. 아니 더 있을지도 모르지만 그래야만 한다는 알 수 없는 강박관념에 사로잡혀 싹을 틔우지도 못한 채 그대로 잠들어버린다. 너무 깊고 오래되어 무엇을 하려고 했는지 조차 감 잡을 수도 없을 정도다. 다시 새롭게 눈을 뜨게 된 건 생활이 좀 익숙해졌을때다. 내적 발현은 삶이 여유로울 때 행해지는 것인가. 사람이 등따시고 배부르면 다른 생각을 한다는 말이 이제와서 보니 전혀 틀린 말은 아니었나보다. 사람이 더 가치있는 일을 수행하고 삶의 목적을 달성하려고 노력하기 위해서는 끊임없는 생각을 하고 교육을 받을 필요성을 느꼈다. 노..

하루 경영

보다 덜 후회하는 삶을 살기 위해서, 목표를 달성하고 원하던 삶을 영위하기 위해서는 그에 다다르기 위해 계획을 세워야 한다. 합리적이고 효과적인 계획을 세우기 위해서는 보다 많은 생각을 거쳐야하는데, 이 때 필요한 체력이 생각체력이라고 한다. 주변의 소음을 모두 제거한 채로 오로지 생각만을 거듭할 수 있는 힘이 존재한다면, 목표를 달성하기는 그다지 어렵지 않다. 무식하게 노력하는 것보다 효율이 더 좋다. 생각하는 체력을 기르기 위해서는 생각이 잘 되는 장소를 정해두는 것도 좋다. 본인은 산책을 할 때 생각을 기를 수 있었던 경험이 많았으므로 근처 공원이나 한적한 길을 따라 걷는것이 도움이 될 듯 하다. 생각하는 힘을 기르고, 그 체력을 기르는 것이 하루를 경영하는데, 그리고 더 나은 삶을 영위하는 데 도..