본문 바로가기

전체 글

Visual Studio 2019 Community 버전 설치 원래 c++ 을 이용하기 위해 eclipse cdt를 이용하다가 약간의 불편한 점들이 발생하여 VS를 깔으려 한다. 학생때 자주 이용한 툴이긴 하지만 자바랑 친해지면서 자연스레 VS는 노트북에서도 용량때문에 없애고 멀어졌던 것 같다. 다시 친해져봐야지. vs는 여기서 다운받을 수 있다. (Community 버전으로 깔아야 무료이다) install까지 전부 풀어주고 나면 다음과 같은 화면이 나온다. 1. Find the workload you want in the Visual Studio Installer. 원하는 workload를 선택해주면 된다. 나는 c++ 코딩만 필요하므로 c++를 사용한 데스크톱 개발만 체크하였다. 여기서 체크하지 않은 것들도 Tools > Get Tools and Features.. 더보기
[개념] 플로이드 와샬 (Floyd Warshall) / 백준 11404 '모든 정점' 에서 '모든 정점'으로의 최단 경로를 구하고 싶다면 플로이드 와샬 알고리즘을 사용해야 한다. 플로이드 와샬 알고리즘은 기본적으로 '거쳐가는 정점'을 기준으로 알고리즘을 수행한다. 또한 플로이드 와샬은 기본적으로 다이나믹 프로그래밍(DP) 기술에 의거한다. 위와 같은 그래프가 존재한다고 해보자. 이때 각각의 정점이 다른 정점으로 가는 비용을 이차원 배열의 형태로 출력하면 다음과 같다. 이제 이 테이블이 의미하는 바는 '현재까지 계산된 최소 비용' 이다. 이러한 이차원 배열을 반복적으로 갱신하여 최종적으로 모든 최소 비용을 구하는게 목적이다. 바로 그러한 반복의 기준이 '거쳐가는 정점'인 것이다. 바로 1을 거쳐가는 경우부터 차례대로 살펴보도록 하자. (자기자신에서 출발하여 자기자신으로 도착하.. 더보기
[개념] Bit연산 비트연산 logical right shift arithmetic right shift - 부호를 염두해두고 하는 shift 연산자 ① getBit bit연산자를 이용해 숫자 9의 이진수 값에서, i=(3)번 인덱스 값을 가져오려면? 9의 경우 3번 인덱스의 값이 1이다. (01001) 20의 경우 3번 인덱스의 값이 0이다 (10100) 우리가 원하는건 해당 자리수의 값이므로, 나머지 자리들은 다 0으로 만들어주고 해당 자리수만 원본데이터에서 가져오는 값을 만들어줘야 한다. 그렇게 구하기 위해서는 해당 인덱스의 값을 1로 세팅하고 나머지는 0으로 세팅하여 -> 1000 & 연산자를 해주면 원하는 값을 얻을 수 있다. = X 그러면 연산할 값인 1000은 어떻게 만들어낼까? 1을 i만큼 왼쪽으로 shift.. 더보기
[개념] 에라토스테네스의 체 에라토스테네스의 체는 가장 대표적인 소수(Prime Number) 판별 알고리즘이다. 소수란 '양의 약수를 두 개만 가지는 자연수'를 의미하며 그 말은 결국 1과 자기자신만을 약수로 가지는 자연수이다. #include bool isPrimeNumber(int x) { for(int i=2; i 더보기
[개념] 조합, 순열 + DFS,BFS [순열, 조합] 순열이라는 것은 주어진 수열에서 순서에 따라 결과가 달라지는 방식을 순열이라고 한다. 말 그대로, 순서가 존재하는 열 이라는 것이다. 즉 순열에서 { 1, 2, 3 } 과 { 1, 3, 2 } , { 2, 1, 3 } 등.. 모두 다른 결과를 가져온다. 순서가 다르기 때문이다. 조합은 순서가 상관이 없는 모임을 의미한다. 순서가 상관 없기 때문에 { 1, 2, 3 }, { 1, 3, 2 } , { 2, 1, 3} 모두 같은것으로 취급을 한다. 순서가 상관없기 때문에 1, 2, 3 이라는 3개의 숫자로 이루어져있다는 점에서 똑같은 취급을 하는 것이 조합이다. 1. 조합이용 - 5개중 3개 뽑아보기 #include #define MAX 5 using namespace std; int Arr[.. 더보기
[개념] 그래프 이론 (무방향) 그래프 G=(V,E) - V: 노드(node) 혹은 정점(vertex) - E: 노드쌍을 연결하는 에지(edge) 혹은 링크(link) - 개체(object)들 간의 이진관계를 표현 - n=|V|, m=|E| - 어떤 노드 v에 인접한 노드를 찾으려면 결국 해당 v의 한 행을 봐야하므로 O(n) 시간이 걸린다. - 어떤 에지 (u,v) 검사 -> 배열의 (u,v) 만 찾으면 되므로 O(1) 시간 - 어떤 노드 v에 인접한 모든 노드 찾으려면 결국 v의 연결리스트들의 길이를 구하면 되고 그것은 인접한 노드의 수와 동일하다. degree(v) = v에 인접한 노드의 갯수 (인접행렬보다 유리) - 어떤 에지 (u,v) 가 존재하는지 검사 - 연결리스트의 길이에 비례하는 시간이 걸린다. (인접행렬보다.. 더보기
Git : Authentication failed 에러 처리 remote: HTTP Basic: Access denied fatal: Authentication failed for 'https://gitlab.com/~~' 인증 관련 데이터를 초기화하기 위해서는 아래와 같이 처리하면 된다. 관리자 권한으로 명령창을 연다. 'git config --system --unset credential.helper' 를 실행한다. global 영역 설정이 문제를 일으킬 수 있으니 'git config --global --unset credential.helper' 를 실행한다. 출처 : https://stackoverflow.com/questions/47860772/gitlab-remote-http-basic-access-denied-and-fatal-authentication 더보기
[개념] 버블정렬, 선택정렬 선택정렬 (Selection Sort) 선택정렬은 배열중에 가장 작은 원소들을 왼쪽부터 채워나가면서 숫자를 정렬하는 방법입니다. 최소원소를 찾은 후 => 최소원소를 맨 왼쪽원소와 교환(즉, 왼쪽부터 정렬된 원소로 채워집니다.) => 왼쪽원소를 제외하고 원소가 하나남을때 까지 이단계를 반복 선택정렬의 비교횟수를 구해보면 1단계 => n개의 원소 비교 2단계 => n-1 개의 원소 비교 3단계 => n-2 개의 원소 비교 .... 를 하여 비교 횟수는 n(n-1) /2 가 됩니다. 즉, 시간복잡도는 O(n^2)이 됩니다. for(i=0; i arr[j+1]) { int temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } } } 출처 https://cornswro.. 더보기