Programming/Computer Science 16

CS study - 운영체제 - 2

프로세스와 스레드 프로세스(process) 는 컴퓨터에서 실행되고 있는 프로그램의 인스턴스를 말하며 CPU 스케줄링의 대상이 되는 작업(task), 데이터, 메모리등을 포함합니다. 각 프로세스는 운영체제로부터 독립적으로 실행되지만 운영체제로부터 자원을 할당받아 사용합니다. 스레드(thread) 는 프로세스 내 작업의 흐름, 실행되는 작은 실행 단위입니다. 하나의 프로세스는 여러개의 스레드를 가질 수 있으며, 각각 스레드는 프로세스 내에서 병렬적으로 실행됩니다. 스레드는 프로세스 내에서 같은 메모리 공간을 공유하므로 데이터와 자원을 공유합니다. 3-1 프로세스와 컴파일 과정 프로세스는 프로그램으로부터 인스턴스화된 것을 말합니다. 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번..

CS study - 운영체제 - 1

3장 운영체제 - 1 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스로 한정된 메모리나 시스템 자원을 효율적으로 분배하는 역할을 하며 유사한것으로 소프트웨어를 추가설치 할 수 없는 펌웨어(firmware)가 있습니다. 1-1 운영체제의 역할과 구조 CPU 스케줄링과 프로세스 관리 : CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리합니다. 메모리 관리 : 한정된 메모리를 어떤 프로세스에 얼만큼 할당하는지 관리합니다. 디스크 파일 관리 : 디스크 파일을 어떤방법으로 보관할지 관리합니다. I/O 디바이스 관리 : 입출력 기기들의 데이터를 주고 받는 것을 관리합니다. 운영체제의 구조 GUI : 사용자가 전자장치와 상호 작용할 수 있도록하는 사용자 인터페이스의 형태,..

CS study - 자료구조 - 1

자료구조 효율적으로 데이터를 관리하고 수정, 삭제, 탐색, 저장할 수 있는 데이터 집합 1. 복잡도 1-1 시간 복잡도 시간 복잡도란 ‘문제를 해결하는 데 걸리는 시간과 입력의 함수 관계’를 가리킵니다. 어떠한 알고리즘의 로직이 ‘얼마나 오랜 시간’이 걸리는지를 나타내는 데 쓰입니다. public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String a = scanner.next(); System.out.println(a + "In"); } } 시간복잡도에는 평균과 최악의 시간복잡도를 고려하면서 씁니다. 자료 구조의 평균 시간 복잡도자료구조 접근 탐색 삽입 삭제 배열 O(1)..

이것이 코딩 테스트다 (JAVA 코드) - Greedy

개요 그리디 (greedy) 알고리즘이란 현재 상황에서 지금 당장 좋은 방법으로만 풀이를 해나가는 것을 그리디 알고리즘이라고 합니다. 그리디 알고리즘의 핵심은 정당성 분석을 통한 풀이 입니다. 단순히 가장 좋아보이는 것만을 반복해도 최적의 해가 나올 수 있는지 검토해야 합니다. 출처 이것이 코딩테스트다 예시 루트 노드부터 시작하여 거쳐가는 노드의 값들의 합을 최대값으로 구하고 싶을 때 최적의 해를 구하려면 어떻게 해야할까요? 최적의 해는 5 - 7 - 9 노드일겁니다. 하지만 그리디 알고리즘은 현재 상황에서 가장 큰 값만 선택하게 되는 경우입니다. 그러므로 보통은 5 - 10 - 4노드를 선택합니다 그렇다면 이 경우 최적의 해가 아니게 됩니다. 일반적인 상황에서 그리디 알고리즘은 최적의 해가 보장받을 수..

알고리즘 공부 - 재귀함수 2편(하노이의 탑, 재귀 제거)

이번 포스팅에선 지난 재귀함수 1편에 이어서 공부해보겠습니다! 재귀함수를 제거하거나 비재귀적으로 표현하려면 어떻게 해야할까요? 꼬리 재귀의 제거 메서드의 꼬리에서 재귀 호출하는 메서드 recur(n-2)라는 말은 '인자로 n-2를 전달하여 recur 메서드를 호출한다.' 는 의미 입니다. 따라서 이 호출은 다음과 같이 바꿀 수 있습니다. n 의 값을 n - 2로 업데이트하고 메서드의 시작 지점으로 돌아갑니다. static void recur(int n) { while (n > 0) { recur(n - 1); System.out.println(n); n = n-2; } } 이렇게 하면 메서드의 끝에서 실행하는 꼬리 재귀(tail recursion) 는 쉽게 제거할 수 있습니다. 일반 재귀의 제거 그런데 ..

알고리즘 공부 - 재귀함수 1편

재귀함수란? 여기서 재귀(recursive)는 어떤 사건이 자기 자신을 포함한 채로 다시 자기 자신을 사용하여 정의될 때, 즉 자기 스스로를 재사용할 때 라고 편하게 줄일 수 있을 거 같습니다. 익숙한 현상을 이야기 해보자면 엘리베이터 속 거울안에 거울같은 느낌! 코드로 간단하게 구현해보겠습니다. class Factorial { // 재귀함수 factorial 구현해보기 static int factorial(int n) { if(n > 0) { return n * factorial(n - 1); } else { return 1; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextIn..

알고리즘 공부 - 스택과 큐 ( Stack & Queue )

https://goodthinking.tistory.com/53?category=965455 자료구조 - Stack 를 간단한 코드로 파악하기 개념 스택(Stack)이란? 데이터를 저장하기 위한 자료구조중 하나로 데이터를 일시적으로 저장하기 위해 고안된 개념이며, 가장 나중에 넣은 데이터를 가장 먼저 꺼내는 방식으로 진행됩니다. 데 goodthinking.tistory.com https://goodthinking.tistory.com/55?category=965455 자료구조 - 큐(queue), 간단한 코드로 파악하기 개념 큐(queue), 역시 스택과 비슷하게 데이터를 일시적으로 쌓아놓기 위한 자료구조입니다. 다만 차이점은 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO, First In..

알고리즘 공부 - 검색부터 다시 해보자

개요 나는 현재 개발자로 솔루션회사에서 근무중인 주니어개발자이다. JAVA 언어가 베이스인 회사에서 자바와 스프링 프레임워크로 코딩하는 것은 당연하지만, 일을 할수록 공부하는 시간이 줄어들고 알고리즘등 혹시 나중에 코딩테스트가 필요할텐데 싶은 생각에 앞으로 꾸준히 문제를 풀어야겠다고 생각이 들어 문법은 건너뛰고 검색 알고리즘부터 재귀, 큐, 스택등으로 개념정리부터 해보려고 한다. 열심히 정리해보자! 선형검색(linear search) 간단하게 생각하자면 선형 = 일자로 쭉 늘어진 것 따위 일것이다. 그렇게 key 와 일치하는 값을 찾기위해 하나씩 검색하면서 진행하는 알고리즘으로 보통 for문이나 switch문으로 loop를 돌려서 index 를 증가시키며 찾는 것이다. 가장 단순한 알고리즘으로 구현하기도..

자료구조 - 큐(queue), 간단한 코드로 파악하기

개념 큐(queue), 역시 스택과 비슷하게 데이터를 일시적으로 쌓아놓기 위한 자료구조입니다. 다만 차이점은 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO, First In First Out) 구조입니다. 실 생활에서 예를 들자면 마트의 대기열이나, 은행 창구에서 차례를 기다리는 순서라고 이해하면 편합니다. enqueue : 인큐 라고 불리며, 큐에 데이터를 삽입하는 작업을 뜻합니다. dequeue : 디큐 라고 불리며, 인큐의 반대로 데이터를 꺼내는 작업을 뜻합니다. front : 프런트는 데이터를 꺼내는 out 쪽을 뜻합니다. rear : 리어는 데이터를 넣는 쪽을 뜻하며 back이라고도 불립니다. 큐를 구현하기 쉬운방법은 역시 배열입니다. public class IntQueue { p..

자료구조 - Stack 를 간단한 코드로 파악하기

개념 스택(Stack)이란? 데이터를 저장하기 위한 자료구조중 하나로 데이터를 일시적으로 저장하기 위해 고안된 개념이며, 가장 나중에 넣은 데이터를 가장 먼저 꺼내는 방식으로 진행됩니다. 데이터의 입출력 순서를 후입선출(LIFO, Last In First Out) 이라고 불리며, 간단하게 표현하자면 가장 나중에 넣은 데이터를 가장 먼저 꺼냅니다. 사용단어? push : 스택에 데이터를 넣는 작업 pop : 스택에서 데이터를 꺼내는 작업 top : 푸시와 팝이 이루어지는 가장 바깥쪽을 탑이라 합니다 bottom : 스택의 가장 아랫부분, 푸시가 가장먼저 이루어졌던 데이터의 위치를 바텀이라고 합니다 peek : 피크(peek)란 '몰래 엿보다'라는 뜻을 가지며 스택의 가장 상단의 top 인덱스를 보여줍니다...