본문 바로가기
반응형

프로그래밍174

C++ set 사용법과 설명... set에 대해 설명하고자 합니다. 사용법도요. 아마 set을 사용하려고 검색하셔서 오시게 된 분이시라면, set의 특징을 잘 아시는 분일겁니다. 네, set의 특징은 다음과 같습니다. 1. 숫자든 문자든 중복을 없엔다. 2. 삽입하는 순서에 상관없이 정렬되서 입력이 된다. 이 특징을 모두 만족시킬 수 있는 자료구조는 이진 트리 입니다. 즉, set은 벨런스 트리로 Red-Black 트리로 만들어져 있습니다. 이런식으로 말이죠... 이진트리 특성상 삽입과 삭제가 용이합니다. 자료 찾는것도 준수하고요. 그럼 사용법을 알아보겠습니다. Set의 초기화 set 변수 기본적인 선언방법 set 변수(복사할 변수) 선언 후 복사한 값으로 초기화 set 변수 = 복사할 변수 서언 후 복사한 값으로 초기화 #include.. 2019. 12. 13.
유니코드와 아스키코드(SBCS, MBCS, WBCS) 원래 코드를 짜면 일반적으로 영문, 숫자를 아스키코드로 컴퓨터는 인식합니다. 따라서 123char c = 65; printf("%c", c); //output : Acs 이런식으로 가능합니다. 이는 아스키코드를 사용해 문자든 숫자든 1바이트로 표현하기 때문인데, 1바이트는 8비트로0 ~ 256까지의 가지수를 표현할 수 있습니다. 하지만 아스키코드는 7비트만 사용합니다. 그 이유는 맨 앞의 1비트는 에러검출을 위해 사용하기 때문이죠. 이렇게 말이죠.... 하지만 시대가 발전하면서 다른 여러 나라들(한국, 일본, 중국, 아랍, 인도 등....)도 컴퓨터를 많이 사용하기 시작했고 그로인해 다른나라의 언어도 표현해야 했습니다. 하지만 1바이트로 문자를 표현하는 것은 자리가 없어서 2바이트로 표현하기로 합니다. .. 2019. 12. 11.
CPU와 메모리 사이의 동작 일반적으로 윈도우에서 프로그램을 실행시키면(.exe) 프로그램은 잘 실행됩니다. 이 프로그램 단위를 컴퓨터 용어로 프로세스(process)라고 합니다. 이 프로그램이 실행되면 주기억장치인 RAM에 올라가는 것이 아니라 가상메모리로 올라가게 됩니다. 이 부분은 여기!에 잘 설명해 놨으니 참고하시길 바랍니다. 그럼 CPU와 RAM 사이에서 데이터를 주고 받으면서 프로그램이 잘 동작하게 됩니다. 여기서 좀 더 자세히 들여다보면 CPU와 RAM 사이를 연결해주는 통로를 버스(BUS)라고 하며, CPU도 ALU, Control Unit, Register Set, Bus interface로 나눌 수 있습니다. 그렇다면!! CPU는 RAM에서 데이터를 가져와 어떻게 처리하는지 살펴보겠습니다. 1. ALU(Arithm.. 2019. 12. 10.
C++ 이진탐색 구현하기(재귀) 이진탐색이란? 정렬되어 있는 배열의 수를 효율으로 빠르게 찾는 방법입니다. 실생활에서 쓰일 수 있는 예로는...... 술게임의 업다운이 있습니다. 물론 해당 숫자를 찾을 때, 50, 25, 17.... 이런식으로 진행하면 안되지만..... 떠오르는 예제가 이것밖에 없내요..ㅎㅎ..... 시간 복잡도는 O(longN) 이며 4,294,967,296개(약 43억개)를 32번만에 찾아낼 수 있는 빠른 알고리즘 입니다. 기초적이지만 재귀함수를 사용해 찾는 방법이라 재귀를 처음 접하거나 익숙하지 않다면 구현이 다소 어렵고 이해하기도 어렵습니다. 이런 좋은 알고리즘이지만 한가지 제약조건이 필요한데, 그것은 숫자가 정렬되어 있어야 한다는 점입니다. 우선 코드를 보겠습니다. #include using namespace.. 2019. 12. 4.
C++ string 사용법 및 기능정리(동작방식) C++에는 string이란 클래스가 있습니다. 이걸 사용하려면 string 헤더파일을 선언해 줘야 하며 다양한 기능을 제공합니다. 그렇다면 string이란 녀석이 왜 생겨났을까?? 기존 C언어에서 문자열 처리를 하려면 상당히 골치 아팠습니다. 특히 가변 길이를 처리할때요. 프로그래머가 손수 메모리를 재 할당 해주거나 그게 아니라면 충분한 문자열 배열을 선언해주거나... 너무 번거롭고 나중에 문제생길 것들이 많았죠... 예상치 못한 결과도 초래했다고 합니다. 그래서 C++에서는 class로 문자열을 감싸고 public을 통해 쉽게 사용할 수 있도록 정의하고 만들었습니다. 그래서 C++은 문자열 사용을 기본적으로 string으로 하고 있습니다. 그렇다면 string에 사용법에 대해 알아보도록 하겠습니다. S.. 2019. 11. 25.
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.
Kadane's algorithm 이란? (설명) 코딩 문제를 풀다보면 이런 문제가 나옵니다. "배열 A의 요소들 중 연속된 합이 가장 큰 수를 구하시오" "배열 A의 요소들 중 연속된 합이 가장 큰 배열 요소의 범위를 구하시오" 배열 요소중 양수만 있을 경우 모두 다 더해주면 되지만 음수가 들어가면 머리가 복잡해 집니다. 직관적으로 풀어버리면 이중 for문을 사용해 각 범위마다 값을 구한 후 구한 값들 중 가장 큰 값을 구해야 합니다. 하지만 이는 O(n^2)이 되버리며 코딩 문제에서도 이러한 답은 원하지 않습니다. 그리고 이러한 문제는 흔히 볼 수 있으며, 코딩 테스트를 준비하고 있는 분들이라면 기본적으로 손쉽게 풀 수 있어야 한다고 생각합니다. 위 문제들은 O(n)으로 풀 수 있는데 Kadane's algorithm을 사용하면 됩니다. 위 식이 K.. 2019. 11. 19.
Linux) Doker와 Container의 탄생과 설명, 차이점 ※이 글은 제가 인터넷으로 공부한걸 바탕으로 작성된 글입니다. 잘못된 내용이나 보충해야할 내용이 있으면 댓글이나 E-mail로 피드백 해주시면 감사하겠습니다. What is Docker? 도커는 리눅스의 컨테이너라는 기술(LXC)를 이용한 소프트웨어로 지금은 자체 라이브러리인 libcontainer를 사용하고 있습니다. 위 말만 들으면 도커가 뭐하는건지, LXC는 뭐고 libcontainer는 뭔지... 감이 안잡힙니다. 흔히 웹 검색으로 알 수 있는 지식은 다음과 같습니다. 1. 도커를 이용하면 개발환경에 구에받지 않고 손쉽게 내가 사용하던 개발환경을 구축할 수 있다. 2. 도커를 이용하면 여러개의 독립된 프로세스를 띄워 마이크로서비스가 가능해진다. 3. 도커를 이용하면 배포가 쉽고 수정도 쉽다. 4... 2019. 11. 13.
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.
Embedded] Exception Vector table ARM에서 exception or interrupt가 발생하면 모든 행동을 중단하고 해당 exception의 형태에 따라 exception vector table의 양식에 맞는 실행을 하게 된다. 종류는 다음과 같다. Data Abort 메모리의 데이터를 읽거나 쓰는데 실패하는 경우 FIQ IRQ Prefectch Abort 명령어를 해석하다가 실패하는 경우 발생 SWI 주로 시스템 콜을 구현할 때 많이 사용 Reset ARM코어가 리셋될 때 사용 Undefined Instruction 읽어온 명령어가 정의되지 않은 명령어일 때 사용 2019. 9. 8.
도전 임베디드 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.
도전 임베디드 OS 만들기 - qemu, u-boot 설치(Ubuntu 18.04 64bit ver) PC status OS : Ubuntu 18.04 (64bit)ram : 8GBgcc : 7.4.0 ver QEMU 설치 window에서 가상머신인 virtualbox를 이용하는 것 처럼 embedded 개발도 에뮬레이터 라는걸 이용하면 됩니다. EZ보드를 사서 해도 되지만..... 돈도 나가고 또 비쌉니다. 국내에선 구하기 힘들구요. 하여, 책에서 소개하고 있는 qemu라는 녀석을 설치해 보겠습니다. qemu는 최신버전을 사용해도 무방함으로 위와 같은 형식으로 설치해 줍니다. u-boot 설치 ※ 2019년 8월 27일 현재 '도전 임베디드 os 만들기'의 arm-linux-gcc, u-boot, qemu등 소스 파일이 있는 홈페이지가 안들어 가집니다.때문에 제 github에 일단 올려놨습니다. '$ .. 2019. 8. 27.
Ubuntu 18.04 버전 인터넷 자꾸 끊길 때 자동 Reset해주는 프로그램. 안녕하세요? 저는 현재 Ubuntu 18.04 버전을 사용하고 있습니다. 그리고 공부할 때 원격접속(ssh)를 통해서 리눅스를 사용하고 있습니다. 근데 사용하다보면 간혹 인터넷 연결이 끊길 때가 있습니다. LAN선은 잘 물려있는데 말이죠... 즉, 하드웨어적으론 정상인데 소프트웨어 적으로 끊긴다는 뜻입니다. 해결 방법은 '$ reboot' 명령어로 리눅스를 재시작 하거나, '$ sudo service network-manager restart' 명령어를 입력해 줘서 리눅스의 network를 restart하는 방법이 있습니다. 근데 집에서 리눅스를 켜놓고 밖에 나와서 접속하려고 할 때 연결이 위와 같은 현상으로 끊기게 되면 아무것도 못하게 됩니다..... 집에 누군가가 있다면, 전화로 LAN선을 뺏다 꽂으.. 2019. 8. 25.
728x90
반응형

스킨편집 -> html 편집에서