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