본문 바로가기
반응형

hwanshell107

C++ vector사용법 및 설명 (장&단점) C++의 vector는 C++ 표준라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 사용하기 편하게 정의된 class를 말합니다. vector를 생성하면 메모리 heap에 생성되며 동적할당됩니다. 물론 속도적인 측면에서 array(배열)에 비해 성능은 떨어지지만 메모리를 효율적으로 관리하고 예외처리가 쉽다는 장점이 있어 많이 사용하고 있씁니다. 그럼 우선 사용법에 대해 설명하겠습니다. Vector의 초기화 vector 변수명 백터 생성 vector 변수명(숫자) 숫자만큼 백터 생성 후 0으로 초기화 vector 변수명 = { 변수1, 변수2, 변수3... } 백터 생성 후 오른쪽 변수 값으로 초기화 vector 변수명[] = {, } 백터 배열(2차원 백터)선언 및 초.. 2019. 11. 24.
2020 카카오 공채 : 문자열 압축 (풀이 및 코딩) 조건은 s의 길이가 1 이상 1,000 이하.... 모든 알파벳은 소문자 입니다. 해당 코드는 2중 for문으로 충분히 풀이가 가능하고 탐색 조건도 쉽습니다. 앞에서부터 문자들을 차례대로 비교하면 됩니다. 처음엔 1개씩, 그 다음 2개, 그 다음 3개 ..... (s의 총 길이 / 2) 개 까지... 비교문자 마지막을 왜 s의 총 길이 / 2로 했냐면 그 이상 넘어가 버리면 비교의 의미가 없기 때문입니다. (비교할 수가 없죠) 그래서 예제 1번을 보면 aabbaccc 이렇게 있는데, 처음엔 a, a, b, b, a, c, c 하나씩 비교하고, 그 다음엔 aa, bb, ac, cc 이렇게 2개씩 비교하고, 그 다음엔 aab, bac, cc 이렇게 3개씩 비교하고..... 이런식으로 비교한 후 중복되는 알파.. 2019. 11. 23.
Kadane's algorithm 이란? (설명) 코딩 문제를 풀다보면 이런 문제가 나옵니다. "배열 A의 요소들 중 연속된 합이 가장 큰 수를 구하시오" "배열 A의 요소들 중 연속된 합이 가장 큰 배열 요소의 범위를 구하시오" 배열 요소중 양수만 있을 경우 모두 다 더해주면 되지만 음수가 들어가면 머리가 복잡해 집니다. 직관적으로 풀어버리면 이중 for문을 사용해 각 범위마다 값을 구한 후 구한 값들 중 가장 큰 값을 구해야 합니다. 하지만 이는 O(n^2)이 되버리며 코딩 문제에서도 이러한 답은 원하지 않습니다. 그리고 이러한 문제는 흔히 볼 수 있으며, 코딩 테스트를 준비하고 있는 분들이라면 기본적으로 손쉽게 풀 수 있어야 한다고 생각합니다. 위 문제들은 O(n)으로 풀 수 있는데 Kadane's algorithm을 사용하면 됩니다. 위 식이 K.. 2019. 11. 19.
C++] 위상정렬 구현 및 설명 위상정렬은 각 노드들의 간선 개수를 구한 후 간선개수가 가장 적은 요소부터 순회하는 알고리즘입니다. 여기서 간선 개수란 각 노드마다 연결된 개수를 의미합니다. 간선 개수가 적은 요소들을 순회하기 때문에 한번에 원하는 지점까지 못가게 되는 특징이 있습니다. 위상정렬을 이용한 예제들은 주로 '게임 스킬트리, 우선순위에 대한 시간 문제 등...' 다양하게 사용되고 있습니다. 아래 그림을 통해 코드를 구현해 보겠습니다. 여기서 만약 A에서 E로 간다고 가정한다면 A는 B나 C를 거치고 D를 거처서 E로 가거나 혹은 D에서 F를 거처 E로 가게 됩니다. 즉, 노드 간선을 기점으로 모든 노드를 순서대로 거처가는걸 알 수 있습니다. 이 간선을 거처가는것이 하나의 조건이 될 수 있습니다. 아래는 구현 코드 입니다. #.. 2019. 9. 26.
C++] 인접 리스트 구현 인접리스트는 그래프의 한 종류입니다. 인접리스트를 쓰는 가장 큰 이유는 바로 탐색 때문인데, 우리는 인접리스트를 통해 연결된 모든 노드들을 확인할 수 있습니다. 우선 아래의 그림의 그래프를 만들어 보겠습니다. #include #include #include #include using namespace std; enum { A, B, C, D ,E}; void AddGraph(vector * v, int x, int y) { v[x].push_back(y); v[y].push_back(x); } int main(void) { vector g[5]; AddGraph(g, A, B); //A B 연결 AddGraph(g, A, D); //A D 연결 AddGraph(g, B, C); //B C 연결 AddGr.. 2019. 9. 23.
도전 임베디드 OS 만들기 - hello world 출력!!(Ubuntu 18.04 64bit ver) u-boot 에뮬레이터로 hello world를 출력해 보는 글이 되겠습니다. 우선 이지부트 소스를 다운받아야 합니다. $ wget http://forum.falinux.com/_zdownload/data/ezboot.x5.v18.tar.gz $ tar -zxf ezboot.x5.v18.tar.gz 다운로드 후 압축을 풀면 'v18.org' 디렉토리가 생성될 것입니다. 디렉토리에 들어간 후 ls를 해보면 아래와 같은 디렉토리가 있을 것입니다. 여기서 사용할 폴더는 include, main 디렉토리 입니다. 따라서 이 두개를 따로 빼줍니다. $ mkdir ~/navilnux $ cp main/ ~/navilnux -r $ cp include/ ~/navilnux -r 그 후 main 디렉토리에 있는 ser.. 2019. 8. 30.
리눅스(Ubuntu18.04 ver) .bashrc, .profile, .bash_profile, .vimrc 가 없을 경우!! 리눅스를 사용하다보면 예상치 못하게 파일이 날아갈 때가 있습니다. 또 이것 저것 설치하다가 지우고를 반복하다보면 사용중인 계정(/home)에 있는 디렉토리 혹은 파일들이 없어져 있을 때도 있죠. 사용자 계정을 새로 만들고 그 계정에 들어갔는데 정말 아무것도 없을 때도 있죠.... 분명히 없는 이유는 있지만 리눅스에 익숙하지 않은 사람들에겐 상당히 당황스럽고 짜증나는 일입니다. 제목에서 볼 수 있듯이 .bashrc, .profile, .bash_profile 같은 기본 shell 코드가 없어질 때도 있습니다. 특히 root계정은 괜찮은데 user 계정이 말썽이죠..... 그래서 user계정을 사용하고 있는데 .bashrc, .profile, .bash_profile 파일들이 없어졌을 때 해결방법을 알려드리.. 2019. 8. 29.
C++ for_each문 개념과 사용법 설명 C++에는 기본 문법인 for문이 있습니다. for문으로 모든 반복문을 만들 수 있고 실행시킬 수 있습니다. 하지만 단순 for문으로 만들기엔 귀찮거나 손이 많이가는 반복문을 만들 수 밖에 없는 상황이 종종 존재합니다. 한가지 예시를 들겠습니다. #include #include #include using namespace std; void print_fnc(int n) { cout 2019. 8. 1.
C++ 함수 포인터란? 왜 사용할까? C와 C++에서는 포인터라는 중요한 요소가 존재합니다. 그리고 포인터를 많이 활용하죠. 그 이유는 주소 값을 대입해 해당 위치로 이동하거나 접근이 가능하기 때문입니다. 함수 또한 그 주소 값을 갖고 호출이 되면 해당 주소 값으로 이동해 프로그램을 실행하게 됩니다. 함수 포인터란 함수의 주소 값을 지닐 수 있는 포인터 변수 입니다. 선언 방법은 다음과 같죠. int (*fp1)(); int (*fp2)(int); int (*fp3)(int, int); bool (*fp4)(); void (*fp5)(); 위와 같은 형식으로 정의할 수 있습니다. 반환 타입은 말 그대로 함수의 반환 타입. 변수 이름은 함수를 저장할 수 있는 변수의 이름 ※앞에 *이 붙었는데 이는 포인터 변수이기 떄문입니다. 설명을 덪붙이자면.. 2019. 7. 20.
c++ 함수 객채란?? C++에서는 객체를(클래스) 함수처럼 사용이 가능합니다. 설명하기에 앞서 연산자 오버라이딩 개념을 알아야 합니다. 연산자 오버라이딩1(클릭) 연산자 오버라이딩2(클릭) 이 함수 객체를 왜!!!! 사용하는지 알아보기에 앞서서 우선 예제를 보겠습니다. #include using namespace std; class Plus{ public: Plus(){ num = 0; } int operator()(){ num++; return num; } int operator()(int n){ num = ++n; return num; } friend ostream& operator 2019. 7. 18.
C++ inline 함수란? inline 함수는 C++의 실행 속도 개선을 위해 등장 했습니다. C++에서는 기본적으로 클래스 선언을 통한 맴버함수가 많이 이용되는데, 이러한 경우 보통 간단한 기능을 하는 함수들이 많이 만들어지게 됩니다. 생성자, getter(), setter(), print() 등 과같은 간단한 함수들 말이죠. 함수들이 간결하여 실행속도에 영향을 끼지지 않을 것 같지만 함수 호출 과정에서 프로그램 속도가 떨어지게 됩니다. 함수의 호출은 다음과 같이 진행됩니다. ※찾아보니 중간에 레지스터에도 값이 저장되는데 어떤 값이 무슨 이유로 저장되는지는 저도 잘 몰라서 일단 제외했습니다. 코드로 보면 다음과 같습니다. #include int fnc_1(int a, int b){ //매개변수 스택에 저장 return a + b.. 2019. 7. 13.
C++ Lambda 사용 이유와 사용 방법 C++에는 lambda라는 문법이 존제합니다. 원래 이 lambda는 boost라는 라이브러리에서 제공하는 함수였지만 지금은 modern c++로 넘어가면서 이 기능을 기본적으로 지원하게 되었습니다. (현재 modern c++은 C++ 20 까지 나왔습니다.) 출처 : https://modoocode.com/196 ● [] 캡쳐 블록 (사용시 외부 변수를 캡쳐해 람다 몸통에서 사용 가능) ● () 전달 인자 ● -> 반환 타입 ● {} 함수 몸통 (※Lambda는 기본적으로 캡쳐 블록'[]', 전달인자 '()', return type을 생략할 수 있습니다.) 참...... 어려워 보이고 이런 기능이 왜 있는지 감이 안잡히고... 고통 스럽습니다..... 우선!! 이 lambda 라는 문법이 왜 필요한지 .. 2019. 7. 1.
C++ 변수 형 타입 auto C++로 변수를 선언할 때 보통 자료형을 선언해 줍니다. int a = 10; double b = 5.12; char c[] = "hello"; 이런식으로 말이죠. 하지만 요즘 개정된 modern c++이나 boost 를 사용 할 시 다음 키워드를 사용할 수 있습니다. 바로 auto 이죠. auto 키워드는 따로 자료형을 지정해 주지 않아도 '변수 초기 값'에 따라 자동으로 자료형 타입이 결정됩니다. int main(void) { auto a1 = 10; auto a2 = 5.41; auto s = "hello"; cout 2019. 7. 1.
C++로 Restful서버 만들기(casablanca) 2. Server Sample Code 이번엔 GET을 통해 서버로부터 간단한 메시지를 얻어오는 TEST를 해보겠습니다. 우선 아래는 Sample Code 입니다. #include #include using namespace std; using namespace web::http; using namespace web::http::experimental::listener; int main(){ http_listener listener(U("http://localhost:9090")); //Server URL, Port 지정. listener.open().then([&listener](){cout 2019. 5. 28.
C++ 템플릿 클래스 템플릿은 클래스에서도 적용이 가능 합니다. #include using namespace std; template class Calculator{ private: T x, y; public : Calculator(T n1, T n2) : x(n1), y(n2) {} T Adder(){ return x + y; } }; int main(void){ Calculator cal1(10, 20); Calculator cal2(1.5, 20.99999); cout 2019. 5. 17.
728x90
반응형

스킨편집 -> html 편집에서