목록분류 전체보기 (17)
주니어 개발자의 대나무숲
회사에서 일을 하다 보니 terminal에 계속 tab을 추가하여 사용하는 것에 한계를 느끼던 중, tmux와 screen을 추천받게 되었습니다. 무엇을 사용하는게 더 나을까 고민하며 구글링해본 결과, tmux가 더 좋다는 의견이 많아 tmux의 사용법에 대해 공부하기로 결정했습니다. What is tmux terminal 화면을 여러개로 분할하고, 세션을 생성하여 attach/detach를 자유롭게 할 수 있는 terminal multiplexer입니다. Terms prefix : 단축키를 입력하기 전에 먼저 입력해야 하는 키조합으로, tmux의 default 키조합은 crtl + b 입니다. 예를 들어, 단축키가 c라면 ctrl + b + c를 입력해서 해당 단축키를 사용할 수 있습니다. sessio..
linear regression은 가장 기본적인 머신러닝의 기법 중 하나로, 데이터를 선형 상관 관계로 모델링해 우리가 알고자 하는 값을 예측해내는 방식입니다. 간단한 예시를 통해 linear regression이 무엇인지 알아보도록 하겠습니다. (출처 : https://medium.com/simple-ai/linear-regression-intro-to-machine-learning-6-6e320dbdaf06) 1. Data (데이터) 위 그래프의 가로축을 x, 세로축을 y라고 했을 때 data(빨간 점) 은 다음과 같은 의미를 갖습니다. 우리가 linear regression을 이용해서 풀고자 하는 문제는 'x의 값을 알 때, y의 값은 어떻게 될 것인가?' 입니다. 즉, 내가 하루 평균 이만큼 공부..
1. Data flow graph 머신러닝은 복잡한 mathematical expression의 반복적인 computation의 결과라고 할 수 있습니다. 텐서플로우는 이러한 computation 과정을 data flow graph라는 방향 그래프를 이용해서 나타냅니다. 이 그래프에서 node와 edge는 각각 node : operator edge : data 가 됩니다. 위의 그래프는 간단한 data flow graph입니다. 각 node는 상수를 입력받거나 두 숫자를 더하는 operator로 이루어져 있고, edge는 실수형 data가 자리하고 있습니다. 아래에서, 위의 data flow graph를 tensorflow를 이용해 구현해보도록 하겠습니다. 2. Tensor tensor는 data flo..
1. 머신러닝이란? 머신러닝은 explicit programming의 한계 때문에 고안된 학문입니다. 가령, 어떤 메일이 스팸메일 인지 가려내는 spam filter나 자율주행 자동차 같은 경우에는 발생할 수 있는 경우의 수가 너무 많기 때문에 explicit programming으로 문제를 해결하는 데 어려움이 발생할 수 있기 때문입니다. " Machine learning is the science of getting computers to act without being explicitly programmed. " cf) 딥러닝, 머신러닝, 인공지능의 차이점 개념이 포괄하고 있는 범위로 보았을 때는 인공지능이 가장 넓은 의미의 개념입니다. 인공지능의 궁극적인 지향점은 인간의 지능을 기계로 구현하는 것..
파라메트릭 서치 문제는 단독 문제로 나오기보다는 다른 알고리즘과 결합해서 출제되는 것 같습니다.파라메트릭 서치는 간단히 말하자면, (갓종만북의 표현을 빌려) 최적화 문제(문제의 상황을 만족하는 특정 변수의 최솟값, 최댓값을 구하는 문제)를 결정 문제로 바꾸어 푸는 것 이라고 할 수 있습니다. 지금은 이 표현이 와닿지 않을 수 있습니다. 간단한 그림을 통해 한 번 설명해보도록 하겠습니다. 다음과 같이 나이순으로 정렬된 사람들이 있습니다. 그리고 25살 이상이라면 소주를 좋아한다는 것이 증명되어 있다고 합니다. 그럼 이 중에서 소주를 좋아하는 나이가 가장 어린 사람은 누구일까요?? 물론 가장 간단한 방법은 앞에서부터 차례대로 "너 소주 좋아하니?"라고 물어보면서, 처음으로 "네!"라고 대답하는 사람을 찾는 ..
git을 거의 처음 사용해봐서 그런지 사용법을 익히는 것이 쉽지가 않다.프로젝트 진행에 방해가 되지 않도록 간단한 사용법을 익혀두는 것이 좋을 것 같다! *리모트 저장소 : 인터넷이나 네트워크 어딘가에 있는 저장소로, 다른 사람과 git을 통해 협업한다는 것은 이 리모트 저장소를 관리(저장소 자체 추가, 삭제 및 브랜치 관리, 추적)하고, 리모트 저장소에 데이터를 추가 및 삭제하는 것을 의미합니다. *브랜치 : '작업 공간'이라고 생각할 수 있습니다. 예를 들어, 프로그램에 기능 A를 추가하고 싶은 상황이라고 합시다. 그런데, 이 기능 A가 현재까지 개발한 프로그램의 다른 기능들과 어떤 dependency를 가지고 있을지 모르는 상황이기 때문에 바로 프로그램에 기능을 추가하는 것은 위험할 수도 있습니다...
1. 개념 BFS(Breadth First Search)는 그래프 전체를 탐색하는 방법 중의 하나입니다. 그래프 전체를 탐색하는 방법은 크게 BFS와 DFS, 두 가지가 있다고 할 수 있습니다. 그 둘 중 오늘은 BFS에 대해 배워보도록 하겠습니다. BFS의 핵심은 그래프 전체를 탐색하되, 인접한 노드들을 차례대로 방문하도록 구현한다는 점입니다. 그리고, 이를 구현하기 위해 STL의 queue를 사용하게 됩니다. 인접한 노드들을 먼저 방문한다는 말이 잘 이해가 안되신다면, 아래의 그림을 통해 이해하실 수 있을 겁니다. 위의 그림은, 노드 A부터 시작해서 BFS로 모든 노드를 방문하는 것을 나타낸 모습입니다. BFS는 인접한 노드들을 차례대로 방문한다고 했었습니다. 시작 노드인 노드 A에 인접한 노드는 노..
그래프 관련 문제를 풀 때는, 문제 상황을 그래프로 모델링한 후에 푸는 것이 보편적입니다. 이 때, 모델링한 그래프의 연결관계를 나타내는 두 가지 방식이 있습니다. 1. 인접 행렬2. 인접 리스트 1. 인접 행렬 1) 정의인접 행렬은 그래프의 연결 관계를 이차원 배열로 나타내는 방식입니다. 인접 행렬을 adj[][]라고 한다면 adj[i][j]에 대해서 다음과 같이 정의할 수 있습니다. adj[i][j] : 노드 i에서 노드 j로 가는 간선이 있으면 1, 아니면 0 cf) 만약 간선에 가중치가 있는 그래프라면 1 대신에 가중치의 값을 직접 넣어주는 방식으로 구현할 수 있습니다. 2) 예시간단한 예시를 통해 이해해보도록 하겠습니다. 다음과 같은 그래프가 있는 경우, 이 그래프의 연결 관계를 인접 행렬로 나..
BOJ 13417 카드 문자열 (https://www.acmicpc.net/problem/13417) 이 문제는 한 면에 문자가 써 있는 카드를 왼쪽부터 하나씩 가져와 재배열하는데, 재배열한 카드들의 왼쪽 끝과 오른쪽 끝에만 카드를 놓을 수 있는 경우 사전순으로 가장 빠른 문자열이 되도록 재배열하는 문제입니다. 이 문제는 각각의 카드를 재배열할 때, 왼쪽 끝에 놓을 것인지 오른쪽 끝에 놓을 것인지를 판가름하는 기준이 무엇일지만 알면 쉽게 풀 수 있습니다. 예제로 나와있는 M,K,U에 대해 생각해 보겠습니다.M은 첫 번째 카드이므로 그냥 올려놓은 후, K를 추가할 때의 상황입니다. K를 M의 왼쪽에 올려놓아야 할까요 아니면 오른쪽에 올려놓아야 할까요? 답은 왼쪽입니다. 이유는 왼쪽에 올려놓는 경우와 오른쪽..
BOJ 13416 주식 투자 (https://www.acmicpc.net/problem/13416) 이 문제는 해당 날짜에 각 회사의 주식이 낼 수 있는 이익(양수)과 손해(음수)가 값으로 주어지고, 하루에 최대 한 회사의 주식만 구매할 수 있을 때(아무 회사의 주식도 구매하지 않을 수 있음) N일 동안 낼 수 있는 이익의 최댓값을 고르는 문제입니다. 최대 한 회사의 주식만 구매할 수 있고 구매할 수 있는 주식의 값에 제약 조건이 없으므로 매우 쉬운 문제입니다. 이익을 가장 많이 낼 수 있는 회사의 주식을 구매하되, 이익의 최댓값이 음수인 경우(모든 회사의 주식이 손해를 내는 경우)에는 아무 회사의 주식도 구매하지 않으면 전체 이익을 최대로 할 수 있습니다. 1234567891011121314151617..