- 데이터 구조와 알고리즘의 중요성에 대해 어떻게 생각하시나요? (데이터 구조와 알고리즘의 중요성)
- 데이터 구조는 데이터를 효율적으로 저장하고 조작하는 방법을 제공합니다.
- 알고리즘은 문제 해결을 위한 절차나 방법론을 제시합니다.
- 올바른 데이터 구조와 알고리즘 선택은 프로그램 성능과 효율성에 큰 영향을 미치기 때문에 매우 중요하다고 생각합니다.
- 알고리즘 복잡도(시간 복잡도와 공간 복잡도)에 대해 설명해주세요. (빅오 표기법)
- 시간 복잡도는 알고리즘이 어떤 문제를 해결할 때 드는 시간을 의미합니다. 주로 빅오 표기법으로 사용해서 나타냅니다.
- 평균 복잡도
- 공간 복잡도는 알고리즘이 어떤 문제를 해결하는데 드는 메모리를 의미합니다.
- 보통 알고리즘 복잡도를 나타날때는 시간 복잡도로 나타냅니다.
- 어떤 정렬 알고리즘을 알고 있으며, 각 알고리즘의 특징을 설명할 수 있나요? (정렬 알고리즘,시간 복잡도)
- 버블 정렬: 인접한 두 요소를 비교하는 기본적인 정렬 방법입니다. 시간 복잡도는 n^2입니다.
- 선택 정렬: 리스트에서 최소 또는 최대 값을 찾아서 정렬하는 방법입니다. 시간 복잡도는 n^2입니다.
- 삽입 정렬: 한 요소씩 올바른 위치에 삽입하여 정렬하는 방법입니다. 시간 복잡도는 최선의 경우 n, 최악의 경우는 n^2입니다.
- 퀵 정렬: 기준 요소를 중심으로 분할하여 정렬하는 방법입니다. 평균 시간 복잡도는 nlogn입니다.
- 병합 정렬: 리스트를 두 부분으로 나누고 정렬된 부분을 다시 병합하는 방법입니다. 시간 복잡도는 nlogn입니다.
- 해시 테이블의 작동 원리와 사용 사례를 설명해주세요. (해시 테이블이 어떻게 사용되고 어디에 사용되는지)
- 해시 테이블은 키-값 쌍으로 이루어진 자료 구조입니다.
- 해시 함수를 사용하여 키에 대한 값을 쌍으로 검색할 수 있습니다.
- 사용 사례로는 레디스가 있습니다.
- 재귀 함수의 개념과 어떤 상황에서 사용하는 것이 유용한지 설명해주세요. (재귀 함수의 정의와 작동 방식)
- 재귀 함수는 자신을 다시 호출하는 함수입니다.
- 저는 보통 코딩 테스트에서 피보나치 함수 문제를 풀 때 사용했습니다.
- 객체 지향 프로그래밍(OOP)의 기본 개념에 대해 설명해주세요.
- 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.
- 다형성, 캡슐화, 상속과 같은 OOP의 핵심 개념을 어떻게 이해하고 활용하나요? (오버로딩, 오버라이딩, 정보은닉)
- 다형성은 하나의 객체가 여러가지 타입을 가질 수 있는 것입니다.
- 오버로딩: 메서드명은 같지만 파라미터가 다른 메서드
- 오버라이딩: 부모 클래스에서 정의한 메서드를 자식 클래스에 재정의
- 캡슐화는 데이터와 그 데이터를 조작하는 메서드를 하나의 캡슐로 묶는 것입니다.
- 상속은 한 클래스의 속성과 메서드를 다른 클래스가 받아들이는 것입니다.
- 이러한 개념들을 활용해서 코드 재사용 및 확장성을 증가 시키는데 활용됩니다.