728x90

TIL 255

08/30 CS공부 - 자료구조(스택, 큐)

1. 스택(Stack)말 그대로 데이터를 쌓는 자료구조이다. 입력과 출력이 한방향으로 제한되며 후입선출구조를 따라 가장 나중에 들어온 것이 가장 먼저 나온다.함수의 콜스택, 문자열 역순출력, 연산자 후위표기법 등을 이용할 때 사용된다.push(삽입)과 pop(제거, 제거된 데이터를 return 함, 코틀린 기준)연산이 주를 이룬다. isEmpty, isFull 등을 이용해 스택의 상태를 검사한다. 이러한 연산을 처리하기 위해 SP(스택 포인터)를 사용한다.단방향 접근만 허용되므로 중간의 원소를 꺼내기 위해서는 해당 원소 뒤의 모든 원소를 pop해야한다.배열 기반의 Stack의 경우 배열의 단점인 고정크기를 계승한다. 링크드 리스트, 동적배열 사용을 통해 해결할 수 있다.2. 큐(Queue)입력과 출력을 ..

TIL/공부 2024.08.30

08/29 CS공부 - 자료구조(배열, 링크드 리스트)

1. 배열(Array)배열은 동일한 데이터 타입의 요소들을 연속된 메모리 공간안에 저장하는 자료구조이다.크기: 크기는 처음 생성될 때 고정되며 프로그램 동작 중에 변경할 수 없다.접근: 인덱스를 이용해 배열의 특정 요소에 접근하며 연속된 메모리공간에 있기 때문에 접근속도가 O(1)로 매우 빠르다.데이터 타입: 일관된 데이터 타입을 가져야한다.요소의 추가: 배열의 크기는 불변이므로 요소를 추가하려면 새로운 배열을 만들어야한다.삽입 또는 제거: 마찬가지로 데이터를 삽입하거나 삭제할 경우 배열의 삽입위치 이후의 모든 요소를 움직이거나 새로운 배열을 만들어야 하므로 비효율적이다.(O(n)의 시간 소요)이러한 배열은 크기가 변하지 않는 데이터셋을 다루거나 특정 위치에 빠르게 접근해야하는경우 사용하면 좋다.Arra..

TIL/공부 2024.08.29

08/28 CS 공부 - OS(메모리 관리 기법)

메모리 관리 기법다중 프로그래밍 시스템에 여러 프로세스를 수용하기 위해 주기억장치를 동적 분할하는 메모리 관리작업이 필요해서 사용1. 연속 메모리 관리프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야함고정 분할 기법: 주기억장치가 고정된 파티션으로 분할(내부 단편화 발생)동적 분할 기법: 파티션들이 동적 생성되며 자신의 크기와 같은 파티션에 적재(외부 단편화 발생)2. 불연속 메모리 관리프로그램의 일부가 서로 다른 주소공간에 할당될 수 있는 기법페이징: 고정사이즈의 작은 프로세스 조각프레임: 페이지 크기와 같은 주기억장치 메모리 조각단편화: 기억장치의 빈 공간 또는 자료가 여러 조각으로 나뉘는 현상세그먼트: 서로 다른 크기를 가진 논리적 블록이 연속적 공간에 배치되는 것고정크기: 페이징가변크기:..

TIL/공부 2024.08.28

08/27 CS공부 - OS(데드락, 뮤텍스, 세마포어)

1. 데드락(DeadLock, 교착상태)두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 못하는 상태 -> 무한히 다음 자원을 기다리게 되는 상태한정된 자원을 여러곳에서 사용하려고 할 때 발생한다.발생조건데드락의 발생 조건에는 4가지가 있으며 4가지 조건을 모두 성립해야 데드락이 발생한다. 하나라도 성립하지 않으면 해결이 가능하다.상호 배제(Mutual exclusion): 자원은 한번에 한 프로세스만 사용할 수 있음점유대기(Hold and wait): 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야함비선점(No preemption): 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗..

TIL/공부 2024.08.27

08/27 CS공부 - 정렬 알고리즘(기수정렬, 계수정렬)

1. 기수 정렬(Radix Sort)지금까지 정렬알고리즘이 모두 비교기반 알고리즘이었다면 Radix Sort는 분포 기반 정렬알고리즘이다. 주어진 데이터를 자릿수 별로 정렬하면서 정렬한다. 문자나 정수열을 정렬할때 유용하다. 큰 자릿수부터 정렬하는 MSD와 작은 자릿수부터 정렬하는 LSD가 있다.MSD(Most Significant Digit)가장 큰 자릿수부터 시작해 낮은 자릿수로 이동하며 정렬한다.높은 자릿수에 따라 배열을 부분배열로 분할하고 각 부분배열을 다시 높은 자릿수부터 정렬한다.문자열 정렬에 유리하다.부분배열을 생성하므로 공간복잡도가 높아질 수 있다.불안정정렬이다.fun msdRadixSort(array: IntArray) { val max = array.maxOrNull() ?: re..

TIL/공부 2024.08.27

08/26 CS공부 - 알고리즘(퀵 정렬, 병합 정렬, 힙 정렬)

1. 퀵 정렬(Quick Sort)피벗을 선택하여 피벗 왼쪽은 피벗보다 작은값, 오른쪽은 피벗보다 큰 값으로 분할(Partitioning) -> 피벗 좌우에 모인 원소들에 대해 반복, 피벗 선택과 Partitioning 방법에 따라 정렬 속도가 좌우됨퀵 정렬의 경우 먼 거리의 원소끼리 비교하므로 속도를 높일 수 있음작은 것으로 나누어 다시 합치는 분할 정복 알고리즘을 사용함시간 복잡도최악의 경우(피벗이 최소 또는 최대값인 경우) O(n^2), 평균적으로 O(nlogn)공간 복잡도주어진 배열 안에서 교환(swap)을 통해 정렬이 수행되므로 O(n)장점한 배열 안에서 교환을 수행하므로 메모리공간이 적게 필요하다.(제자리 정렬)많은 경우에서 다른 O(nlogn) 알고리즘(병합 정렬)보다 빠르다.단점불안정정렬(..

TIL/공부 2024.08.26

08/23 CS 공부 - 정렬 알고리즘(버블 정렬, 선택 정렬, 삽입 정렬)

1. 버블 정렬(Bubble Sort)서로 인접한 두 원소를 비교하고 조건에 불치하면 교환하며 정렬 -> n번 순회하면 뒤에서부터 n번 째 원소까지 정렬된다.시간 복잡도따로 종료조건이 설정되어있지 않다면 반드시 크기가 n인 배열에 대해 n번 순회하므로 최악, 평균, 최선의 경우 모두 O(n^2)종료조건이 설정되어 있다면 최악과 평균은 변함없이 O(n^2)이지만 최선(이미 정렬된 경우)의 경우 1회 순회하므로 O(n)공간 복잡도주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 O(1)장점기본적인 정렬 알고리즘으로 코드가 직관적이며 구현이 간단하다.한 배열 안에서 교환을 수행하므로 메모리공간이 적게 필요하다.(제자리 정렬)안정정렬(Stable sort)이다.단점시간복잡도가 O(n^2)으로 배열의..

TIL/공부 2024.08.23

08/22 CS공부 - 프로세스 & 스레드

프로세스와 스레드란?프로세스: 프로그램을 메모리 상에서 실행중인 작업스레드: 프로세스 안에서 실행되는 여러 흐름 단위프로세스는 적어도 하나의 스레드를 소유(메인 스레드)프로세스프로세스는 각각 별도의 공간을 할당받아 독립적으로 실행된다.Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)Data : 전역변수, 정적변수, 배열 등초기화 된 데이터는 data 영역에 저장초기화 되지 않은 데이터는 bss 영역에 저장Heap : 동적 할당 시 사용 (new(), malloc() 등)Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)스레드스레드는 Stack만 따로 할당받고 나머지는 공유한다.Stack 영역만 따로 할당 받는 이유쓰레드는 독립적인 동작을 수행하기 위해 존재 한다즉 독립적으로 함..

TIL/공부 2024.08.22

08/21 CS 공부 - OS(1)

운영체제(OS)란?운영 체제(OS, Operating System)하드웨어를 관리하고, 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 응용 프로그램과 하드웨어 간의 인터페이스로써 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해준다.즉, 운영 체제는 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어라고 할 수 있다.운영체제의 역할1. 프로세스 관리운영체제에서 작동하는 응용프로그램을 관리, CPU를 점유해야할 프로세스를 결정하고 할당, 프로세스 간 공유자원 접근과 통신등을 관리한다.2. 저장장치 관리1차 저장장치인 메모리와 2차 저장장치인 하드디스크 NAND 등을 관리함3. 네트워킹TCP/IP 기반의 인터넷에 연결하거나 응용프로그램이 네트워크를 사용하려..

TIL/공부 2024.08.22

07/18 알고리즘 공부 - 9로 나눈 나머지

조건음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.제한조건1 ≤ number의 길이 ≤ 100,000number의 원소는 숫자로만 이루어져 있습니다.number는 정수 0이 아니라면 숫자 '0'으로 시작하지 않습니다.입출력 예알고리즘 예상toCharArray와 sumOf를 이용해 각 자리 수의 합을 구한 후 9로 나눈 나머지를 리턴한다. 초기 코드class Solution { fun solution(number: String): Int { var answer: In..

TIL/알고리즘 2024.07.18
728x90
반응형