프로그래밍/CS8 [Computer Science] 복잡도 계산을 위한 빅오 표기법 (Big-O Notation) 에 대해 알아보자 코딩 테스트에서 결과물에 대한 채점을 표기할 때 주로 사용하는 빅오 표기법.평상시에는 이에 대해서 무지하였고 알 생각도 크게 없었으나, 요즘 들어 CS 에 너무 무지했던게 아니었나 싶어 짧게나마 공부하기 위해 글을 작성해본다.# 빅오 표기법 (Big-O Notation) 이란?알고리즘의 시간 복잡도 및 공간 복잡도를 표현하는데 사용되는 수학적 기법.주로 최악의 실행 시간을 표현하기 위해 사용되며 알고리즘의 성능을 입력 크기(n) 이 증가함에 따라 어떻게 변화하는지 나타낸다. # 빅오 표기법 알고리즘 성능1. O(1) - 상수 시간 (Constant Time) 입력 크기와 관계없이 일정한 시간이 걸리는 알고리즘[예시] 배열의 특정 인덱스 찾기# arr 이나 index 가 어떤 값으로 설정되더라도 배열 ar.. 2025. 3. 6. [Computer Science] 여러가지 자료구조에 대해 알아보자 # 자료구조란? 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.# 자료구조의 분류자료 구조에는 단순 자료 구조과 복합 자료 구조으로 나뉘며 복합 자료 구조에서는 다시 선형 자료 구조 및 비선형 자료 구조로 분류가 된다. # 선형 자료 구조데이터가 순차적으로 나열되어 있으며, 각 요소가 하나의 다음 요소와 직접적으로 연결되어있는 구조 이러한 특징으로 인해 인덱스를 통한 접근이 용이하고 순회가 쉽다.선형 자료 구조에는 여러 하위 구조들이 존재하는데 이들은 대표적으로 다음과 같다. 1. 배열동일한 데이터 타입의 요소들을 연속적인 메모리 공간에 저장접근시 Index 를 사용하므로 O(1)삽입/삭제시 요소 이동으로 인해 O(n)검색시 정렬되지 않은 배열의 경우 순차 탐.. 2025. 2. 23. [Computer Science] 프로그램의 메모리 구조에 대해 알아보자 (Code, Data, Stack, Heap) # 프로그램 실행1. 프로그램 실행 요청을 전달받는 경우2. 운영체제가 프로그램의 정보를 읽어 메모리에 로드하고3. CPU 가 코드 영역, 데이터 영역의 데이터를 읽고 이를 실행한다. # 코드 구조이러한 메모리의 구조는 아래 이미지와 같이 4가지로 이루어진다. 메모리는 주소가 낮은 방향(0x0000…)에서 높은 방향(0xFFFF…)으로 증가하는 방식으로 구성이 되는데, 위의 이미지를 보면 코드와 데이터, 힙 영역의 경우 낮은 주소 -> 높은 주소로 증가한다.스택 영역은 반대로 높은 주소 -> 낮은 주소로 감소한다.의 특징을 알 수 있다. # 왜 스택만 높은 주소에서 낮은 주소로 감소할까?이에 대해 설명하기 위해 우선 각 메모리 영역 별 특징을 설명하려고 한다. 1. 코드 영역컴파일된 실행 코드(바이트코.. 2025. 2. 20. [Computer Science] 프로그래밍 패러다임에 대해 알아보자. 우리가 명령형 프로그래밍과 선언형 프로그래밍을 알기 전 프로그래밍 패러다임을 우선 알고 가는 시간을 가져보도록 하자.# 프로그래밍 패러다임이란?프로그래밍이나 소프트웨어 개발에 접근하는 특정한 방식, 철학, 또는 관점즉, 특정한 사고방식과 접근법을 기반으로 코드를 작성하는 방법론을 의미한다. 이러한 프로그래밍 패러다임에는 크게 명령형 프로그래밍, 선언형 프로그래밍 기법으로 나뉜다.# 명령형 프로그래밍 (Imparative Progamming) 이란?어떻게 (How) 해야할지 직접 기술하는 방식.즉, 개발자가 코드를 하나씩 모두 구현하는 방식으로 내부 구현을 모두 알고 있으므로, 추상화가 되어 있지 않다고 볼 수 있다. 명령형 프로그래밍에는 절차형 프로그래밍, 구조적 프로그래밍, 객체 지향형 프로그래밍이 .. 2025. 2. 19. [Computer Science] OOP 에서 아주 중요한 SOLID 원칙에 대해 알아보자 (2/2) 2024.12.19 - [분류 전체보기] - [Computer Science] OOP 에서 아주 중요한 SOLID 원칙에 대해 알아보자 (1/2) 에서 이어집니다. 3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)하위 (자식) 클래스가 부모 (슈퍼) 클래스의 기능을 대체할 수 있어야 한다는 원칙으로, 부모 클래스에 의존하는 코드는 하위 클래스에서도 문제없이 작동해야 한다. // 부모 클래스open class Bird { open fun fly() { println("이 새는 날고있는 중입니다.") }}// 자식 클래스 1 참새class Sparrow : Bird() { override fun fly() { println(".. 2024. 12. 27. [Computer Science] OOP 에서 아주 중요한 SOLID 원칙에 대해 알아보자 (1/2) # SOLID 원칙이란?객체지향 프로그래밍 (OOP) 에서 지켜야하는 다섯 가지 개발 원칙이와 같은 개발 원칙으로는 다음과 같은 5가지 원칙이 존재한다.단일 책임 원칙(Single Responsibility Principle, SRP)개방-폐쇄 원칙(Open-Closed Principle, OCP)리스코프 치환 원칙(Liskov Substitution Principle, LSP)인터페이스 분리 원칙(Interface Segregation Principle, ISP)의존성 역전 원칙(Dependency Inversion Principle, DIP)이와 같은 개념들은 OOP 를 통해 코딩을 하다보면 매우 중요하고 이를 토대로 설계된 방대한 코드들이 존재하므로 가급적이면 외우는게 좋다. 1. 단일 책임 원칙 .. 2024. 12. 20. 이전 1 2 다음