자료구조와 알고리즘의 역할자료구조:메모리 영역에 데이터를 잘 정리하고 저장하는 방식.데이터를 효율적으로 저장, 관리, 검색하기 위해 사용되는 논리적 구조.예를 들어, 배열, 연결 리스트, 트리, 스택, 큐 등은 메모리의 데이터를 체계적으로 관리하기 위한 자료구조이다.자료구조의 목적은 데이터 접근의 효율성을 극대화하여 프로그램이 메모리에서 데이터를 쉽게 가져오고, 수정하거나 삭제할 수 있도록 하는 것이다.알고리즘:자료구조에 저장된 데이터에 효율적으로 접근하고, 자원을 관리하여 프로그램의 성능을 올리는 방법.특정 문제를 해결하기 위해 어떤 순서로, 어떤 방식으로 데이터를 처리할지 결정하는 논리적인 절차.예를 들어, 정렬 알고리즘(버블 정렬, 퀵 정렬), 탐색 알고리즘(이진 탐색, 해시 탐색), 그래프 알고리..
Algorithm/📚Concept

※ 나동빈 저자의 '이것이 취업을 위한 코딩 테스트다 with 파이썬 '를 참고하여 정리한 글입니다. 사실 직접 시간 복잡도와 공간 복잡도를 실제로 측정하는 것은 처음 글에서 때에 따라 유용하게 쓰이지만 대부분은 빅오 표기법(Big-O Notation)을 사용하여 다루지 않겠다고 하였지만 잠깐 소개하고 넘어 가겠다. 실제로 측정하는 방법은 주로 검증을 위해 쓰이는데 우리가 처음 알고리즘을 공부한다면 너무 빅오 표기법에만 의존하지 말고 정말 내가 계산한 빅오 표기법의 성능과 일치 하는지 검증을 위해 테스트 해 보면 좋다.아마 이 과정을 통해서 더 알고리즘 성능 측정을 능숙하게 할 수 있게 될 것이며, 자신의 필요에 따라 구현하고 측정하는 개발자의 능력 또한 성장할 수 있을 것이다. 보통 어떤 알고리즘을 설..

※ 나동빈 저자의 '이것이 취업을 위한 코딩 테스트다 with 파이썬 '를 참고하여 정리한 글입니다.시간 복잡도 - 빅오 표기법에 따른 명칭빅오 표기법명칭O(1)상수 시간(Constant time)O(logn)로그 시간(Log time)O(n)선형 시간O(nlogn)로그 선형 시간O(n^2)이차 시간O(n^3)삼차 시간 O(2^n) 지수 시간O(n!)팩토리얼 시간시간 복잡도에서 연산?프로그래밍 언어에서 지원하는 사칙 연산, 비교 연산 등과 같은 기본 연산을 의미한다.예를 들어, 두 정수 a, b를 더하는 '+' 연산뿐만 아니라, 두 정수 a, b의 값을 비교하는 비교 연산 또한 한 번의 연산으로 취급한다.코딩 테스트와 시간복잡도코딩 테스트에선 시간 복잡도 '시간 제한'이 있다.이 의미는 작성한 프로그램이..

알고리즘을 설계할 때, 시간 복잡도와 공간 복잡도를 고려하여 가장 효율적인 코드를 짜야 한다는 것을 알았으니이제는 어떻게 시간 복잡도와 공간 복잡도를 측정할 수 있는지 알아보자. 알고리즘 성능 정확한 측정 방법우선 시간 복잡도와 공간 복잡도를 측정하는 방법은 몇가지가 있다.시간 복잡도: 알고리즘이 얼마나 오래 걸리는지를 직접 측정하는 방식으로 실제 알고리즘 코드에서 시작 시간과 끝 시간을 측정하는 코드를 짜거나 시스템 프로파일링 도구를 사용하는 방법으로 직접 측정이 가능하다.공간 복잡도: 알고리즘이 얼마나 많은 메모리를 사용하는지 확인하기 위해서 메모리 프로파일링 도구를 사용하거나 메모리 크기를 확인하는 함수나 혹은 직접 구현하는 방법으로 직접 측정이 가능하다.수학적 계산 분석: 알고리즘의 시간 복잡도를..

※ 나동빈 저자의 '이것이 취업을 위한 코딩 테스트다 with 파이썬' 내용을 읽고 정리한 글입니다. 복잡도(Complexity)알고리즘의 성능을 나타내는 척도이다.복잡도는 시간 복잡도와 공간 복잡도 2가지로 나눌 수 있다. 시간 복잡도(Time Complexity)특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지를 의미한다.즉, 프로그래밍 한 코드(알고리즘)을 돌렸을때, 처리되기까지 얼마나 오랜 시간이 걸리는지를 판별하고 최대한 빠르고 원하는 성능을 뽑아낼 수 있는 효율적인 알고리즘을 설계하기 위해 필요하다. 공간 복잡도(Space Complexity)특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지를 의미한다.즉, 프로그래밍 한 코드(알고리즘)가 컴퓨터 자원(메모리)을..
프로그래머가 되기 위해 처음에는 프로그래밍 언어부터 학습해야 한다. C, C++, C#, Java, Python, JavaScript 등 다양한 언어를 배우며, 각 언어의 특징과 코드 구조를 이해하게 된다면 이제 실제 프로그래밍을 시작할 차례다.[알고리즘과 자료구조를 알아야 하는 이유]간단한 실습 프로그램은 각 언어에서 제공하는 표준 라이브러리나 외부 API, 프레임워크를 통해 쉽게 만들 수 있다.하지만 제공되는 함수들은 기본적인 알고리즘에 불과하며, 단순하게 이것들만 사용하면 코드가 비효율적이고 복잡해질 수 있다.따라서 알고리즘과 자료구조를 정확히 이해해야 한다.이를 통해 기본 제공 도구를 더 효과적으로 활용할 수 있으며, 더 효율적이고 최적화된 코드를 작성하기 위해서는 직접 알고리즘을 응용해 코드를 ..