inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

인프런 워밍업 클럽 3기 CS - 2주차 발자국

찬우 이
1

2주차 학습 내용 - 발자국


자료구조 & 알고리즘

재귀함수

function sum(n) {
  if (n === 1) return 1; // ✅ 기본 조건(Base Case): n이 1이면 재귀 종료
  return n + sum(n - 1); // 🔁 재귀 호출(Recursive Case): sum(n-1) 호출
}

console.log(sum(5)); // 5 + 4 + 3 + 2 + 1 = 15

기본조건

재귀 호출

 

하노이 탑(재귀)
function hanoi(count, from, to, temp) {
  if (count === 0) return;
  hanoi(count - 1, from, temp, to);
  console.log(`원반${count}를 ${from}에서 ${to}로 이동했습니다.`);
  hanoi(count - 1, temp, to, from);
}

hanoi(3, "A", "C", "B"); 

 

 

버블정렬

function bubbleSort(arr) {
  let n = arr.length;
  for (let i = 0; i < n - 1; i++) { // 전체 반복 횟수
    for (let j = 0; j < n - 1 - i; j++) { // 점점 줄어드는 비교 범위
      if (arr[j] > arr[j + 1]) { // 오름차순 정렬
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // Swap (교환)
      }
    }
  }
  return arr;
}

let arr = [5, 3, 8, 4, 2];
console.log(bubbleSort(arr)); // [2, 3, 4, 5, 8]

 

선택정렬

function selectionSort(arr) {
  let n = arr.length;

  for (let i = 0; i < n - 1; i++) {
    let minIndex = i; // 현재 정렬된 부분 이후에서 가장 작은 값의 인덱스 저장

    for (let j = i + 1; j < n; j++) { // i 이후 요소들과 비교
      if (arr[j] < arr[minIndex]) {
        minIndex = j; // 더 작은 값이 발견되면 minIndex 갱신
      }
    }

    // 최소값을 현재 위치(i)와 교환 (swap)
    if (minIndex !== i) {
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
  }

  return arr;
}

let arr = [5, 3, 8, 4, 2];
console.log(selectionSort(arr)); // [2, 3, 4, 5, 8]

 


운영체제

 

프로세스 간 통신

쓰레드 간 통신

 

공유자원

임계구역

세마포어

모니터

교착상태(데드락)

  1. 상호배제: 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 한다.

  2. 비선점: 점유한 자원을 강제로 빼앗을 수 없다.

  3. 점유와 대기: 이미 자원을 점유한 상태에서 추가적인 자원을 기다려야 한다.

  4. 원형 대기: 프로세스들이 서로 다음 프로세스의 자원을 기다리는 원형 구조가 형성되어야 한다.

교착상태 해결방안

교착상태 회피

교착상태 검출

컴파일 언어

컴파일에서 실행파일로 변환 과정

test.c -> 전처리기 -> test.i -> 컴파일러 -> test.s -> 어셈블리 -> test.o -> 링커 -> test.exe

1⃣ test.c전처리기(Preprocessor)test.i (주석 제거, 매크로 처리 등)
2⃣ test.i컴파일러(Compiler)test.s (어셈블리 코드 생성)
3⃣ test.s어셈블러(Assembler)test.o (목적 파일 생성)
4⃣ test.o링커(Linker)test.exe (최종 실행 파일 생성)

 

인터프리터 언어

 

메모리 종류

 

레지스터

 

캐시

 

메인메모리(RAM)

 

보조저장장치(HDD,SSD)

 

메모리 할당 방식

 

메모리 오버레이

가변 분할 방식

고정 분할 방식

버디 세스템


2주차 회고

재귀가 너무 어렵다.. 정렬은 그래도 예전에 공부해본적이 있어서 한두번 더 보니까 이해가 되는데 재귀는 봐도봐도 이해가 어려움..

특히 하노이ㅋㅋㅋㅋ 새로운 벽이였다. 그래도 자주 보다보니 적응이 되는것 같기도 하고 아닌거 같기도하고,,,
그렇다 보니 미션 3번째 문제는 도무지 이해가 쉽지 않았다. 그래서 GPT의 도움과 함께 계속 이해해려하고 있고 지금도 하고있다,,ㅎ

그리고 2주차때는 중간점검을 통해 다같이 구글밋을 했다. 주 내용은 운영체제같은 CS지식이 있으면 다른 프레임워크나 컴퓨터 쪽의 지식을 쌓고 배울때 지식이 없는사람에 비해 더 빠르게 습득할 수 있고, 흡수하는게 빠르다고 했다. 벌써 다음주가 3주차라서 CS는 마지막 주 인데 마무리 잘해서 수료하고, 수료 이후에도 강의 반복해서 듣고 자료구조 & 알고리즘은 심화버전이 있어서 그걸 들어야 할 것 같다.

알고리즘 · 자료구조 자료구조 알고리즘 운영체제 인프런워밍업클럽 CS

답변 0