🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

CS 1주차 미션.

CS 1주차 미션.

운영체제

    while(true){
      wait(1); // 1초 멈춤
      bool isActivated = checkSkillActivated(); // 체크
    }

위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?

  • 폴링방식은 주기적으로 확인하기때문에 효율이 좋지 않아 이를 보완한 인터럽트방식으로 해결.

  • 인터럽트 방식은 특정 이벤트가 발생하면 cpu에거 전달하여 cpu는 ISR을 실행시켜 작업을 완료하는 방식.

  1. 프로그램과 프로세스가 어떻게 다른가요?

  • 프로그램: 하드 디스크등 정장장치에 저장된 명령문의 집합체

  • 프로세스: 실행중인 프로그램. 저장장치에 저장되어 있는 프로그램이 메모리에 올라가 있는 상태.

 

  1. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?

     

    • 멀티 프로그래밍: 메모리에 여러개의 프로세스를 올려서 실행하는 방식

    • 멀티 프로세싱: CPU를 한개가 아닌 여러개를 이용(멀티 프로세서)하여 작업을 처리하는 방식

     

     

  2. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?

  • 프로세스의 정보를 갖고있는 PCB를 만들고 저장. 하고 프로세스들을 운영체제에서 cpu 스케쥴링을 통해

  1. 컨텍스트 스위칭이란 뭔가요?

  • 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로레스의 상태값으로 교체하는 작업.


자료구조와 알고리즘

  1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.

  • 학생 정보를 저장하고 열람하기 위한 자료구조는 HashTable을 선택.

  • HashTable은 빠른 데이터 읽기와 삽입, 삭제의 장점을 갖고 있어서 학생 정보를 읽어들이거나 추가, 삭제할때 용이하기 때문.

  1. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.

  • 고객의 주문을 받고 주문이 들어온 순서대로 처리하기 위한 자료구조는 를 선택. 자료구조중 큐는 FIFO 구조로 처리되기 때문에 개발하려는 프로그램의 요구사항을 만족하는 자료구조이기 때문.

  1. 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.

     

    • 변경 코드

class Stack {
  constructor() {
    this.list = new LinkedList();
  }

  push(data) {
    // this.list.insertAt(0, data);
    this.list.insertLast(data);
  }

  pop() {
    try {
      // return this.list.deleteAt(0);
      return this.list.deleteLast();
    } catch (err) {
      return null;
    }
  }

  ...
}
  1. 해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요.

     

    • 힌트: charCodeAt() 함수를 이용

    • 예시: name1 = "이운재";

      • name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력

class HashTable {
  // ...  

  hashFunction(name) {
    // 해시 함수. 0~9의 숫자로 계산
    return name.charCodeAt() % 10;
  }
}

// 테스트 코드
const hashTable = new HashTable();

hashTable.set('이운재', 1);
hashTable.set('최진철', 2);
hashTable.set('홍명보', 20);
hashTable.set('유상철', 6);
hashTable.set('송종국', 22);
hashTable.set('박지성', 21);
hashTable.set('김남일', 5);
hashTable.set('이영표', 10);
hashTable.set('최태욱', 8);
hashTable.set('설기현', 9);
hashTable.set('이천수', 14);

console.log('1:: ', hashTable.get('이운재')); // 1
hashTable.remove('이운재');
console.log('1:: ', hashTable.get('이운재')); // null
console.log('21:: ', hashTable.get('박지성')); // 21


댓글을 작성해보세요.

채널톡 아이콘