스택

데이터를 일시적으로 저장하기 위한 자료구조로, 후입선출 구조 (LIFO, Last In First Out)

 

 

push

스택에 데이터를 넣는 작업

 

pop

스택에서 데이터를 꺼내는 작업

 

top

push와 pop을 하는 스택의 가장 윗 부분

 

bottom

스택의 가장 아랫부분

 

 

var stack = [1, 2, 3];

stack.push(4);
// [1, 2, 3, 4]

stack.pop();
// [1, 2, 3]

 

 

 

 

스택과 마찬가지로 데이터를 일시적으로 쌓아 놓은 자료구조지만, 선입선출 구조 (FIFO, First In First Out)

 

 

enqueue

큐에 데이터를 넣는 작업

 

dequeue

큐에서 데이터를 꺼내는 작업

 

front 

데이터를 꺼내는 쪽

 

rear

데이터를 넣는 쪽

 

 

var queue = [1, 2, 3];

queue.push(4);
// [1, 2, 3, 4]

queue.shift();
// [2, 3, 4]

 

 

 

 

 

구현

     구현이란, 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정

     흔히 알고리즘 대회에서 구현 유형의 문제란 무엇을 의미할까?

       →  풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭

 

 

구현 유형의 예시

     알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제

     실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제

     문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제

     적절한 라이브러리를 찾아서 사용해야 하는 문제

 

 

 

행렬

  • 일반적으로 알고리즘 문제에서의 2차원 공간은 행렬(Matrix)의 의미로 사용

행렬, matrix

 

 

  • 시뮬레이션 및 완전 탐색 문제에서는 2차원 공간에서이 방향 벡터가 자주 활용

 

 

// 동, 북, 서, 남
var dx = [0, -1, 0, 1];
var dy = [1, 0, -1, 0];


// 현재 위치
var x = 2, y = 2;


for (var i=0; i<4; i++) {
    var nx = x + dx[i];
    var ny = y + dy[i];
    console.log(nx, ny);
}

// 출력 결과
// 2 3
// 1 2
// 2 1
// 3 2

 

 


 

<문제> 상하좌우

여행가 AN x N 크기의 정사각형 공간에 서 있다. 이 공간은 1 x 1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다. 여행가 A는 상, , , 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다.

계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있다. 각 문자의 의미는 다음과 같다.

     L: 왼쪽으로 한 칸 이동

     R: 오른쪽으로 한 칸 이동

     U: 위로 한 칸 이동

     D: 아래로 한 칸 이동

 

이때 여행가 A가 N x N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 

 

 

문제 해결 아이디어

     이 문제는 요구사항대로 충실히 구현하면 되는 문제

     일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 시뮬레이션(Simulation) 유형으로도 분류되며 구현이 중요한 대표적인 문제 유형

     다만, 알고리즘 교재나 문제 풀이 사이트에 따라서 다르게 일컬을 수 있으므로, 코딩 테스트에서의 시뮬레이션 유형, 구현 유형, 완전 탐색 유형은 서로 유사한 점이 많다는 정도로만 기억하자

 

 


 

<문제> 시각

정수 N이 입력되면 000000초부터 N5959초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하라. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다.

     000003

     001330

 

반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안되는 시각이다.

     000255

     012745

 

 

문제 해결 아이디어

     이 문제는 가능한 모든 시각의 경우를 하나씩 모두 세서 풀 수 있는 문제

     하루는 86,400초이므로, 000000초부터 235959초까지의 모든 경우는 86,400가지

       →  24*60*60 = 86,400

     따라서 단순히 시작을 1씩 증가시키면서 3이 하나라도 포함되어 있는지를 확인

     이러한 유형은 완전 탐색(Brute Forcing) 문제 유형이라고 불림

       →  가능한 경우의 수를 모두 검사해보는 탐색 방법을 의미한다.

 

 


 

<문제> 왕실의 나이트

행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다.

나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있다.

     수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동

     수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동

 

좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하라.

 

 

문제 해결 아이디어

     요구사항대로 충실히 구현하면 되는 문제

     나이트의 8가지 경로를 하나씩 확인하며 각 위치로 이동이 가능한지 확인

     배열을 이용하여 8가지 방향에 대한 방향 벡터를 정의

 

 


 

<문제> 문자열 재정렬

알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력한다.

예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력한다.

 

 

문제 해결 아이디어

     요구사항대로 충실히 구현하면 되는 문제

     문자열이 입력되었을 때 문자를 하나씩 확인

       1) 숫자인 경우 따로 합계를 계산

       2) 알파벳인 경우 별도의 배열에 저장

     결과적으로 배열에 저장된 알파벳을 정렬해 출력하고, 합계를 뒤에 붙여 출력하면 정답

 

 

 

 

 

 

컴퓨터 시스템의 구성요소

  • 하드웨어
  • 운영체제
  • 응용 프로그램
  • 사용자

 

 

 

 

운영체제의 정의

컴퓨터에서 항상 실행되는 하나의 프로그램

 →  이것을 보통 커널이라고 함

 →  OS에서 핵심적인 역할

 

 

커널에서 두 가지 타입의 프로그램

1. 시스템 프로그램

2. 애플리케이션 프로그램

 

 

전통적인 컴퓨터 시스템의 구성

     하나 이상의 CPU

     공통된 버스에 연결된 여러 디바이스 컨트롤러 

 

 

부트스트랩 프로그램

     컴퓨터 전원을 켤 때 실행되는 첫 번째 프로그램

     OS를 메모리에 로드해주는 역할

 

 

인터럽트

I/O 디바이스에서 입력이 발생하여 이 정보를 CPU에 전달할 때 발생

     하드웨어는 언제든 인터럽트 유발 가능

     보통 시스템 버스를 통해서 CPU에 신호 전달

 

출력을 수행하는 단일 프로그램에 대한 인터럽트 타임라인

 

 

폰 노이만 아키텍처

일반적인 명령어 실행 주기

     먼저 메모리에서 명령어를 가져와서 (fetch) 해당 명령어를 명령어 레지스터에 저장한다.

     그런 다음 명령어가 해독되고 피연산자가 메모리에서 가져와져 일부 내부 레지스터에 저장될 수 있다. 

     피연산자에 대한 명령이 실행(execute)된 후 결과가 메모리에 다시 저장될 수 있다.

 

 

저장 장치 계층

 

다양한 스토리지 시스템이 계층 구조로 구성되는 기준

     저장 용량

     접근 시간 (속도)

 

 

I/O 구조

OS 코드의 대부분은 I/O 처리다.

컴퓨터 시스템의 작동 원리

 

DMA = Direct Memory Access

 

 

컴퓨터 시스템 구성 요소의 정의

CPU

명령을 실행시키는 하드웨어

 

프로세서, Processor

하나 이상의 CPU를 포함하는 물리적인 칩

 

코어, Core

CPU의 백 연산 유닛

 

멀티코어, Multicore

동일한 CPU에 여러 컴퓨팅 코어를 포함

 

멀티프로세서, Multiprocessor

다중 프로세서 포함

 

 

SMP, Symmetric Multiprocessing

각 CPU 프로세서가 모든 작업을 수행하는 가장 일반적인 다중 프로세서 시스템

SMP 아키텍처

 

 

Multi-core 디자인

듀얼 코어 디자인 - 하나의 칩에 코어가 2개

 

 

Multiprogramming

     한 번에 한 개 이상의 프로그램이 실행

     CPU 사용률을 높이기 위해 동시에 여러 프로세스를 메모리에 유지

다중 프로그래밍 시스템의 메모리 레이아웃

 

 

Multitasking (=multiprocessing)

다중 프로그래밍의 논리적 확장

     CPU가 작업을 자주 전환하여 사용자가 실행 중인 각 작업과 상호 작용할 수 있도록 한다.

     Concurrency(동시성)와 parallelism(병렬성)의 차이 이해하기

 

CPU 스케줄링

     여러 프로세스가 동시에 실행할 준비가 된 경우 시스템은 다음에 실행할 프로세스를 선택해야 한다.

     CPU 효율을 가장 높일 수 있는 방법은 무엇?

 

 

두 가지의 분리된 작동 모드

사용자 모드(user mode)와 커널 모드(kernel mode)

 →  잘못된 프로그램으로 인해 다른 프로그램이 잘못 실행되지 않도록 하기 위해

 →  커널 모드가 아니면 직접적으로 하드웨어 제어 불가능

사용자 모드에서 커널 모드로 이행

 

 

가상화, Virtualization

단일 컴퓨터의 하드웨어를 여러 다른 실행 환경으로 추상화할 수 있는 기술

 

VMM, Virtual Machine Manager

     VMware, XEN, WSL(Windows System for Linux), ...

 

(a) 단일 운영 체제와 (b) 3개의 가상 머신을 실행하는 컴퓨터

 

 

다양한 컴퓨팅 환경의 운영체제

     전통적인 컴퓨팅

     모바일 컴퓨팅 (e.g. Android, iOS)

     클라이언트-서버 컴퓨팅 (e.g. Web)

     P2P, Peer to Peer 컴퓨팅: 인터넷에서 개인과 개인이 직접 연결되어 파일을 공유

     클라우드 컴퓨팅 (e.g. AWS, Azure, GCP)

     실시간 임베디드 시스템

 

 

OS는 프로그램 실행을 위한 환경을 제공

     User Interface

     Program execution

     I/O operation

     File-system manipulation

     Communications

     Error detection

     Resource allocation

     Logging

     Protection and security

 

 

 

 

'CS > OS' 카테고리의 다른 글

[운영체제] 01. 운영체제가 뭐길래?  (0) 2022.05.26

+ Recent posts