본문 바로가기
  • 공부, 여행 리뷰해요~~!!
반응형

공부50

#pragma once, C++의 header Visual studio로 header file을 하나 만드니 최상단에 #pragma once가 떴다. 그 땐, 뭔지 확인하지 않고 넘어갔다. Ubuntu에서 VS Code로 header 파일을 하나 만드니 아무것도 뜨지 않았다. #pragma once를 써야할까..? #pragma once를 쓰게되면 해당 헤더 파일이 한 번만 빌드가 되도록 한다. 컴파일 단계에서, #include는 모든 파일에 주므로 여기저기서 header 파일이 include 된다면 여러번 중복될 가능성이 있다. 참고로, #pragma once와 같이 include 단계에서 중복을 피하기 위해 #ifndef, #endif를 사용할 수도 있다고 한다. (파일 시작 / 끝 부분에 각각 쓰면 된다.) 2022. 7. 5.
13. C++ Reference, 참조 * 개인공부를 위한 기록입니다. 잘못된 점에 대한 지적 감사드립니다. 저는 MATLAB을 주로 사용하여 연구했던 사람입니다. reference를 왜 쓸까? 라고 생각했을 때, 가장 먼저 떠오른 것은 메모리 측면에서 유리하다'라는 것입니다.(다른 이유가 더 있겠으나 지금 수준에서는 잘 모르겠습니다..) 예제를 보시며 하나씩 파악해 보도록 하겠습니다. 1. 먼저 정수형 변수 n을 하나 선언하겠습니다. int n = 0; // integer의 메모리는 4byte n은 0으로 초기화 되었고, n은 integer이므로 4byte의 메모리에 저장됩니다. 2. n을 지칭하는 reference인 r을 하나 만들어 보겠습니다. int& r = n; reference r을 선언한 것은, 새로운 메모리 할당의 개념이 아닙니.. 2022. 1. 27.
C++ 변수 선언 (uniform initialization), preventing narrow 개인공부를 위한 기록입니다. 잘못된 점에 대한 지적 감사드립니다. C++11 부터는 중괄호와 등호를 이용하여 변수를 선언할 수 있습니다. 중괄호{}를 사용한 변수 선언은 일관된 초기화(Uniform Initialization)라고 합니다. 예시로 확인 하겠습니다. 1. 먼저, 등호를 사용한 초기화 입니다. // 1. 등호를 사용한 초기화 Copy initialization int n1 = { 0 }; int x1[3] = { 1,2,3 }; Point p1 = { 1,2 }; 2. 중괄호를 사용한 변수 선언입니다. // 2. 등호 없이 초기화 Direct initialization int n2{ 0 }; int x2[3]{ 1,2,3 }; Point p2{ 1,2 }; Uniform Initializat.. 2022. 1. 4.
11. 타겟넘버, BFS, 너비우선탐색 * 개인 공부를 위하여 간단하게 정리한 것입니다. * 틀린 부분 지적은 언제나 환영입니다. 지난번 타겟넘버 문제는 DFS를 이용하여 해결하였습니다. 오늘은 BFS를 이용하여 '타겟넘버'를 해결하여 보겠습니다. 이 문제를 BFS로 접근하면 다음과 같이 생각할 수 있습니다. 즉, 첫 번째 numbers의 노드를 기준으로 다음번 노드의 덧셈과 뺄셈한 값을 구하는 방법을 진행합니다. 이렇게 되면 리프노드에는 numbers 노드의 수만큼 덧셈 혹은 뺄셈한 결과가 저장됩니다. 이 리프노드 중에서 target 값과 일치하는 노드의 개수를 구하면 됩니다. 코드는 다음과 같습니다. int solution2(vector numbers, int target) { int ans2 = 0; vector arr_bfs; arr_.. 2021. 9. 13.
10. C++ 타겟넘버, DFS, 깊이우선탐색 * 개인 공부를 위하여 간단하게 정리한 것입니다. * 틀린 부분 지적은 언제나 환영입니다. 오늘은 프로그래머스 코딩 예제인 '타겟넘버'를 DFS를 이용하여 푸는 방법에 대하여 알아보겠습니다. numbers 벡터의 인덱스를 하나씩 진행해 가면서 '+' , '-'의 모든 결과를 확인해 보아야 합니다. DFS로 푼 이유는 노드의 자식노드를 호출하고 연산하는 방법에 착안하여 진행하였기 때문입니다. DFS는 Stack이나 재귀함수(Reculsive Function)를 이용하여 구현 가능하며, 본문의 코드는 재귀함수로 구성하였습니다. * 다음 코드는 프로그래머스를 통과한 코드입니다. #include #include using namespace std; int ans = 0; int t; int k = 0; void.. 2021. 9. 8.
9. C++ 미로찾기(Queue, Maze) Queue를 이용한 미로찾기 예제입니다. 1. "1"로만 이동 가능하고, 0은 이동 불가 1,1,0,0,0 0,1,1,1,1 0,0,1,1,1 0,0,0,0,1 2. 시작 (0,0)을 1로 할 때, (3,4)에서 탈출하면, 최단경로는 8. 3. 코드 #include #include #include using namespace std; vector ans; void solution(vector maze) { int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; ans[0][0] = 1; queue x; queue y; x.push(0); y.push(0); int row, col; while (!x.empty()) { row = x.front(); col = y.front(.. 2021. 8. 19.
8. C++ 동적프로그래밍, 재귀, Top Down, Bottom Up, 피보나치 * 개인 공부를 위하여 간단하게 정리한 것입니다. * 틀린 부분 지적은 늘 환영입니다. 일반적으로, 프로그래밍에서 피보나치 수열은 재귀함수를 통하여 구현합니다. 그러나 만약 a(n)의 피보나치 수열을 구할 때, 시간복잡도는 2^n이 되어 문제가 됩니다. 동적프로그래밍을 이용하여 피보나치 수열을 구하는 방법을 알아보겠습니다. 1. 피보나치 수열 (Fibonacci Sequence) 1, 1, 2, 3, 5, 8, 13, 21 ... 과 같은 형태로 나타나는 수열 1.1. 피보나치 수열의 점화실 a(n+2) = a(n+1) + a(n) (n >=3, a(1) = a(2) = 1) 2. 재귀함수 (Recursive Function) a(1) = a(2) = 1 a(n) = a(n-1) + a(n-2) if) .. 2021. 8. 19.
7. C++ 오름차순 정렬 (vector, sort, ascending, descending) * 개인 공부를 위하여 간단하게 정리한 것입니다. * 틀린 부분 지적은 늘 환영입니다. @ 프로그래머스 정렬 문제를 풀기위한 노트입니다. 정렬 알고리즘을 간단하게 쓰기 위하여 algorithm 라이브러리의 sort 함수를 사용하겠습니다. 1. vector 정의 vector a = {5, 4, 1, 10, 9}; 2. 오름차순 정렬 sort(a.begin(),citations.end()); 3. 내림차순 정렬 3.1. a가 오름차순 정렬로 되어 있기 때문에 이를 reverse합니다. reverse(a.begin(),a.end()); 3.2. 조건을 추가하여 2를 진행하지 않고 곧장 내림차순으로 정렬합니다. sort(citations.begin(),citations.end(),greater()); 2021. 8. 19.
6. C++ string 크기 비교 2 (compare, cmp) * 개인 공부를 위하여 간단하게 정리한 것입니다. * 틀린 부분 지적은 늘 환영입니다. @ 프로그래머스 정렬 문제를 풀기위한 노트입니다. int형 배열 {5,9,11,5,42,3}을 나열한 숫자 중 가장 큰 수는 95542311 이 될 것입니다. 어떻게 구할까요? 한참을 고민하고 풀어봐도 못 풀어서 구글 선생님의 힘을 빌렸습니다...ㅠㅠ 1. string형 배열 생성 vector strs = { 5,9,11,5,42,3 }; string ans = solution(strs); 2. solution 함수는 다음과 같습니다. 2.2. to_string을 이용하여 strs 배열의 원소들을 int형으로 변환합니다. 2.2. sort 함수에 cmp라는 조건을 추가합니다. -> (3.으로) 2.3. vector를 .. 2021. 8. 19.
반응형