컴퓨터는 3층집으로 되어 있다.컴퓨터는 3개 계층으로 구성되어 있다. → H/W, S/W(Kernel, User)H/W = PhysicalS/W = Logical ≒ VirtualCPU 64bit, OS 64bit = 64bit Platform운영체제(OS)는 소프트웨어다. → MS Word와 같다.OS는 위로는 Application을 서포트한다. (잘 작동하도록 도와줌)OS는 밑으로는 하드웨어를 제어/관리 한다.Interrupt = 방해(알람), 컴퓨터와 주변기기가 통신(I/O)을 할 때 마다 Interrupt가 발생한다.I/O(입출력) = Read(읽기), Write(쓰기) C언어 printf 함수 사용하여 Hello World 출력 시 순서 (OS 제어의 순서)printf 함수를 이용해서 API를 ..
2진 트리(Heap)자료당 두 개의 위치정보(링크)를 이용해 셋을 하나로 묶는다.맨 꼭대기를 기준으로 왼쪽에는 작은 숫자, 오른쪽에는 큰 숫자 카드가 있다고 가정한다.생각해볼 문제: 여기에 5번이 있는지 알고 싶다 몇 번 비교하면 찾을 수 있을까? → 3회2진 트리 = Heap(힙) → 정보를 빠르게 나열하기가 굉장히 좋다. 파이썬 코드로 Heap 구현하기Heap(힙)은 최대/최소값을 찾는데 최적화된 자료구조힙은 기본적으로 완전 이진 트리 = 무조건 왼쪽 자식 노드부터 데이터 삽입힙은 데이터의 중복을 허용push → heappush (값 넣기)pop → heappop (값 빼기)최대 힙(Max Heap)최대 힙은 루트 노드가 가장 큰 값을 가지고, 부모 노드가 항상 자식 노드보다 값이 크거나 같다.최소..
Stack(스택)1차원 선형 구조 → I/O 지점이 1개 뿐인 자료구조 → Stack Last In First Out 구조 (LIFO) → 후입선출, 김치냉장고 처음 넣은 것은 맨 아래 바닥에 깔린다.두 번째부터는 처음 넣은 것 위에 쌓인다.바닥에 있는 것을 꺼내려면 위에 쌓인 것들을 모두 치우는 수 밖에 없다.생각해볼 문제: 이런 구조는 왜 필요할까? → 뒤집기(순서 바꾸기), 되돌아가기(Ctrl + Z)Stack → Ctrl + Z Queue(큐)I/O 지점이 양 끝단으로 나뉘어져 있다. → QueueFirst In First Out 구조 → 선입선출버스를 타기 위해 줄을 서는 것과 같다.은행에서 번호표 뽑은 순서로 기다리는 것과 같다.Enqueue → 큐에 뭔가를 집어넣는다.Dequeue → 큐에..
자료를 정리하는 이유좌측과 우측을 비교해보면 자료를 정리하는 이유를 명확히 알 수 있다.머리속에 기억하는 것이 중요한 것이 아니라, 필요할 때 빨리 찾아서 활용할 수 있는 것이 중요하다.잘 정리해놔야 원하는 시점에 원하는 정보를 빠르게 찾아서 활용할 수 있다. 어떻게 정리할 것인가? (1)효율 좋은 사람은 '정리'를 잘한다.지저분한 방을 깨끗이 정리하는 규칙이 알고리즘이다.일정 규칙으로 자료를 나열(혹은 정리)하는 것이 자료구조다.구조화된 자료에서 원하는 것을 빨리 찾아내는 방법은 알고리즘이다. 어떻게 정리할 것인가? (2)이름 순으로, 키 순으로 정렬(Sort)한다.분야(카테고리)를 나누고 성질이 비슷한 것들을 따로 모은다.필요하다면 '단위와 규격'을 만든다. (예: 1반, 2반)생각해볼 문제주민등..
API와 SDKApplication Programming Interface → 함수 = 코드의 묶음 단위 = 어떤 기능을 코드로 제작Software Development Kit → 함수 모음함수는 호출하여 사용한다.함수와 함수 세트를 의미한다.공구와 (가정용)공구세트로 이해하면 쉽다. 참고https://www.inflearn.com/course/%EB%84%93%EA%B3%A0%EC%96%95%EA%B2%8C-%EC%BB%B4%EA%B3%B5-%EC%A0%84%EA%B3%B5%EC%9E%90
고급어와 저급어High level과 Low level의 직역이다.저급어는 기계어(Machine code)이다. = CPU가 인식할 수 있는 명령어기계어는 알아보기 매우 어렵고 고급어는 인간이 이해하기 쉬운 언어이다.고급어의 코드는 보통 함수 단위로 묶어 표시한다.고급어를 기계어로 바꾸는 것이 번역이다. 기계어 코드와 디스어셈블 코드기계어 코드는 CPU같은 기계장치가 이해하는 코드로 사람이 보고 이해하기 굉장히 어렵다.어셈블리어는 기계어를 디스어셈블한 코드로 사람이 이해할 수 있는 코드다.어셈블(Assemble): 어셈블리어 → 기계어디스어셈블(Disassemble): 기계어 → 어셈블리어 C언어 코드 = 고급어 = Hige level고급어가 CPU에서 실행을 하기위해서는 저급어로 번역해야한다. → 컴..