본문 바로가기

전체 글381

[자료구조] ep2) 재귀(Recursion) ㅇ재귀(recursion): 종료조건을 만족하기 전까지 자기 자신을 계속해서 호출→ 종료조건을 잘 설정해야 한다진행 방향: 종료조건을 향하여 진행작동 원리: stack을 생각하자 (LIFO, 후입선출)   이 작동원리에 대한 마인드셋이 너무 너무 중요하다예를 들어 재귀함수는 3건의 요청이 들어온다 하면 한 함수가 3건의 요청을 처리하는 것이 아닌, 각각 3개의 함수가 1건의 요청을 처리하는 것이다 (재귀함수를 이해하기 위한 최고의 그림이자 예시이다, 세종대 컴공 교수님들 최고!)          참고 및 출처: 실전 C프로그래밍(나중채교수님, 한동일교수님), 데이터 구조 원리와 응용(국형준교수님), C언어로 쉽게 풀어 쓴 자료구조(천인국) 2024. 4. 7.
[자료구조] ep1+) 비트행렬로 배우는 시간복잡도의 중요성 그림과 같은 비트행렬 A가 있다고 하자, 1을 카운트하는 방법에는 다양한 방법들이 존재한다여기서 나는 2가지 방법을 얘기하려 한다 1. 가장 일반적인 방법으로 이중포문을 이용해 각 행마다 0이 나올 때까지 카운트를 하는 방법: O(n^2) 2. 제일 하단 좌측에서 시작해 우측 상단을 향해 지그재그 방식으로 올라오며 카운트를 하는 방법: O(n) 1번 방식은 시간복잡도가 O(n^2)이므로 n값이 커질수록 실행 시간은 제곱수로 증폭하게 된다반면에, 2번 방식은 시간복잡도가 O(n)이므로 n값이 커질 수록 실행 시간은 그저 선형적으로 증가하게 된다따라서 우리는 실행 시간의 측면에서 2번 방식이 압도적으로 더 좋은 것을 알 수가 있다그렇기에 우리는 상황에 맞는 자료구조와 알고리즘을 설계할 수 있는 능력을 길러야.. 2024. 4. 7.
[자료구조] ep1) 자료구조 기본 지식들 ㅇ다차원 배열- 3차원 배열 - 4차원 배열   ㅇ빅오(Big O) 표기법: 연산의 횟수를 대략적(점근적)으로 표기"최악의 case 실행시간을 고려한다" [예시](1) 7n-2: O(n)(2) 3n^3 + 20n^2 + 5: O(n^3)(3) 3log(n) + log(log(n)): O(log(n))(4-1) n까지의 반복문: O(n)(4-2) n까지의 이중반복문: O(n^2)(4-3) n까지의 삼중반복문: O(n^3)(5) 조건문에서의 실행시간은 최악의 case로 합산한다+ O(log*n)은 중첩 log(n)을 의미   함수 증가율의 상한을 표시!※ 빅오메가, 빅세타 표기법과 공간복잡도는 생략   ㅇ의사코드 or 수도코드(pseudo-code): 컴퓨터가 아닌 인간에게 읽히기 위해 알고리즘을 간략하게 .. 2024. 4. 7.
foo bar baz 의미 및 유래 foo, bar, baz, fie, foe, fee, ...프로그래밍 언어 공부를 하다 보면 foo, bar, baz 등의 변수명 등을 본 적이 있을 것이다 (특히 스택 오버플로우에서 많이 보인다)우리나라로 치면 변수명을 갑, 을, 병, 정 느낌으로 선언하는 것이다 그렇다면 이 foo, bar, baz의 유래는 어떻게 될까?이 foo, bar, baz의 유래는 아무도 모른다그치만 유래에 대한 추측들로 크게 3가지가 있다   1. 2차세계대전 당시 미 육군에서 쓰이던 여러 줄임말 중, 개판이 됐다는 뜻인 FUBAR(Fucked Up Beyond All Recognition / Repair)에서 Foo와 Bar가 유래했다는 설  2. 1930 ~ 1952년 사이에 만화가 Bill Holman 이 그린 Smo.. 2024. 3. 26.
[컴퓨터 구조] 후기 컴퓨터 구조에 대한 복습 및 정리를 끝마치게 되었다회사 프리랜서일과 병행하느라 조금 디뎠지만, 그래도 이전에 한 번 깊숙이 배웠던 내용인지라 빠르게 진행할 수가 있었다세종대 전자정보통신공학과에는 스파르타라는 별명을 가지신  SoC 권위자 이성주교수님이 계신다 (지금은 반도체시스템공학과에 가신 걸로 알고 있습니다) 그 교수님의 컴퓨터구조론 강의평을 보면 컴퓨터 구조에 대해 아주 깊고 빠삭하게 배울 수 있지만 체감상 6~9학점에 스파르타식으로 너무 너무 힘들다는 강의평들이 여럿 적혀있다솔직히 보고 좀 겁이 났지만 컴퓨터 구조가 CS에 있어서 근간이 되는 중요한 과목이라 생각하여 수강신청 때 1순위로 신청을 하였다 솔직히 이제 와서 생각해 보면 수강하는 동안에는 많이 힘들었다 컴퓨터시스템구조론(William .. 2024. 3. 5.
[운영체제] ep1) 운영체제의 큰 그림 운영체제(Operating System): 실행할 프로그램에 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램(컴퓨터에서 가장 중요한 프로그램이다)여기서 자원이란 시스템 자원으로써 프로그램 실행에 마땅히 필요한 요소들을 말한다 e.g. CPU, 메모리, 보조기억장치, I/O, 패킷, 파일 등 운영체제를 잘 알려면 커널의 개념을 확실하게 알고 가야 한다ㅇ커널(kernel): 운영체제의 핵심 서비스를 담당하는 부분메모리에는 커널 영역과 사용자 영역으로 나뉘어져 있으며, OS는 커널 영역에 적재되어 자원 할당과 프로그램 실행에 도움을 준다 앞으로 운영체제를 지칭할 때는 특별한 언급이 없는 이상 커널을 지칭한다고 생각하면 된다    대부분의 운영체제 서비스는 커널에 있지만 커널에 포함되지 않.. 2024. 3. 3.
[컴퓨터 구조] 추가지식2) SMP, 클러스터, NUMA, 클라우드 컴퓨팅 [병렬 프로세서 시스템의 유형]- 단일 명령어 + 단일 데이터 스트림: SISD(Single Instruction Single Data) - 단일 프로세서- 단일 명령어 + 다중 데이터 스트림: SIMD(Single Instruction Multiple Data) - 벡터, 배열 프로세서- 다중 명령어 + 단일 데이터 스트림: MISD(Multiple Instruction Single Data) - 거의 사용 x- 다중 명령어 + 다중 데이터 스트림: MIMD(Multiple Instruction Multiple Data) - 메모리 공유: SMP, NUMA 시스템 / 분산된 메모리: 클러스터  ※ thread: segment of processtask: Linux에서 칭하는 process 또는 thre.. 2024. 3. 2.
[컴퓨터 구조] 추가지식1) ROM, 바이오스, 펌웨어, QPI, SPEC, 임베디드 ROM에 대해 더 자세히 알아보자ROM → PROM → EPROM → EEPROMROM(Read Only Memory): 변경할 수 없는 데이터를 저장하는 데 사용 e.g. 바이오스PROM(Programmable ROM): 쓰기 기능 제공 ROM (한 번만 쓸 수 있다)EPROM(Erasable PROM): 삭제 가능한 PROMEEPROM(Electrically EPROM): 전기적으로 삭제 가능한 EPROM (더 매력적이다)  보통 ROM에는 바이오스(BIOS)가 있다ㅇ바이오스(Basic Input/Output System): 소프트웨어와 하드웨어 간의 정보 전달의 매개체 역할을 하는 펌웨어  메모리, 디스크, 모니터와 같은 주변기기 사이의 정보 전송을 관장하는 일종의 프로그램이다 컴퓨터의 가장 low.. 2024. 3. 2.
[컴퓨터 구조] ep8) 입출력장치(I/O) 이번 절에서는 장치 컨트롤러와 장치 드라이버라는 개념을 통해 다양한 외부 입출력장치가 컴퓨터 내부와 어떻게 연결이 되고 소통하는 지를 알아보겠다 참고로 이번 장에서 언급하는 입출력장치에는 보조기억장치도 포함된다 (보조기억장치가 컴퓨터 내부와 정보를 주고받는 방식은 입출력장치와 크게 다르지 않다) 장치 컨트롤러에 대해 알아보기 전에 먼저 I/O를 다루기 까다로운 이유 2가지를 알아야 한다 1. I/O에는 종류가 너무 많다 이 말은 곧 규격이 너무 많다는 것과 같다 비유하자면 CPU와 메모리가 한국어를 사용하지만, 프린터는 영어, 스피커는 중국어, 모니터는 일본어를 사용하는 상황과 같다 2. 보통 CPU와 메모리의 데이터 전송률은 높지만 I/O의 데이터 전송률은 낮다 여기서 전송률(transfer rate).. 2024. 3. 1.