[Tech Interview] Part 4. Algorithm

2023. 5. 24. 17:13·🎤 Tech Interview

💡 동적 계획법(DP, Dynamic Programming)에 대해 설명해주세요.

  • 동적 계획법이란 주어진 문제를 풀기 위해, 문제를 여러 개의 하위 문제로 나누어 푸는 방법을 말합니다.
  • 동적 계획법에서는 어떤 부분 문제가 다른 문제들을 해결하는데 사용될 수 있을 때, 답을 여러 번 계산하는 대신 한 번만 계산하고, 그 결과를 재활용하는 메모이제이션(Memoization)기법으로 속도를 향상시킬 수 있습니다.
    • 메모이제이션 : 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 재사용함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술

💡 동적 계획법(DP, Dynamic Programming)이 갖는 2가지 조건은 무엇인가요?

  • 동적 계획법의 조건에는 중복되는 부분 문제와 최적 부분 구조가 있습니다.
  • 중복되는 부분 문제란 나눠진 부분 문제가 중복되는 경우로, 메모이제이션 기법을 사용해 중복 계산을 없앨 수 있는 경우를 말합니다.
  • 최적 부분 구조를 가진다는 것은 전체 문제의 최적해가 부분 문제의 최적해들로써 구성되는 경우를 말합니다.

💡 버블 정렬(Bubble Sort)에 대해 설명해주세요.

  • 버블 정렬은 0번부터 n - 1번 인덱스까지 순회하며, 서로 인접한 두 원소를 비교하여 정렬하는 알고리즘으로, O(n^2)의 시간 복잡도를 갖습니다.


💡 선택 정렬(Selection Sort)에 대해 설명해주세요.

  • 선택 정렬은 첫 번째 값을 두 번째 값부터 마지막 값까지 차례대로 비교하여 최솟값을 찾아 첫 번째에 놓고,
  • 두 번째 값을 세 번째 부터 마지막 값까지 비교하여 최솟값을 찾아 두 번째 위치에 놓는 과정을 반복하며 정렬하는 알고리즘으로, 시간복잡도는 O(n^2)입니다.


💡 삽입 정렬(Injection Sort)에 대해 설명해주세요.

  • 삽입 정렬은 두 번째 값부터 시작해 그 앞에 존재하는 원소들과 비교하여 삽입할 위치를 찾아 삽입하는 정렬 알고리즘입니다.
  • 평균 시간복잡도는 O(n^2)이며, Best Case의 경우 O(n)까지 빨라질 수 있습니다.


💡 힙 정렬(Heap Sort)에 대해 설명해주세요.

  • 힙 정렬은 주어진 데이터를 힙 자료구조로 만들어 최댓값 또는 최솟값부터 하나씩 꺼내서 정렬하는 알고리즘으로, 시간 복잡도는 O(nlogn)입니다.
  • 힙 정렬이 가장 유용한 경우는 전체를 정렬하는 것이 아니라 가장 큰 값 몇 개만을 필요로 하는 경우입니다.


💡 병합 정렬(Merge Sort)에 대해 설명해주세요.

  • 병합 정렬은 주어진 배열을 크기가 1인 배열로 분할하고 합병하면서 정렬을 진행하는 분할/정복 알고리즘에 기반한 정렬 방법으로, 시간 복잡도는 O(nlogn)입니다.


💡 퀵 정렬(Quick Sort)에 대해 설명해주세요.

  • 퀵 정렬은 빠른 정렬 속도를 자랑하는 분할 정복 알고리즘 중 하나로, 피봇을 설정하고 피봇보다 큰 값과 작은 값으로 분할하여 정렬합니다.
  • 병합정렬과 달리 리스트를 비균등하게 분할합니다.
  • 시간 복잡도는 O(nlogn)이며 worst case경우 O(n^2)까지 나빠질 수 있습니다.


💡 Big-O 표기법의 시간 복잡도 크기 순서를 말해주세요.

  • O(1) < O(log N) < O(N) < O(N log N) < O(N^2) < O(2^N) < O(N!)


💡 재귀 알고리즘에 대해 설명해주세요.

  • 재귀 알고리즘이란 함수 내부에서 함수가 자기 자신을 또 다시 호출하여 문제를 해결하는 알고리즘으로,
  • 자기자신을 계속해서 호출하여 끝없이 반복되게 되므로 반복을 중단할 조건이 반드시 필요합니다.

💡 피보나치 규칙을 재귀를 통해 구현한 함수를 손코딩 해주세요.

private int fibonacci(int n) {
    if (n <= 2) {
    	return 1;
    }
    
    return fibonacci(n - 1) + fibonacci(n - 2);
}

💡 팩토리얼 규칙을 재귀를 통해 구현한 함수를 손코딩 해주세요.

private int factorial(int n) {
    if (n > 1) {
    	return n * factorial(n - 1);
    }
    
    return 1;
}

📌 References

  • https://dev-coco.tistory.com/161
저작자표시 (새창열림)

'🎤 Tech Interview' 카테고리의 다른 글

[Tech Interview] Part 6. Operation System  (0) 2023.06.02
[Tech Interview] Part 5. Network  (0) 2023.05.29
[Tech Interview] Part 3. Data Structure  (0) 2023.05.22
[Tech Interview] Part 2. Database  (0) 2023.05.21
[Tech Interview] Part 1. Java  (0) 2023.05.19
'🎤 Tech Interview' 카테고리의 다른 글
  • [Tech Interview] Part 6. Operation System
  • [Tech Interview] Part 5. Network
  • [Tech Interview] Part 3. Data Structure
  • [Tech Interview] Part 2. Database
Baeg-won
Baeg-won
  • Baeg-won
    좋았다면 추억이고 나빴다면 경험이다.
    Baeg-won
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🍃 Spring, Spring Boot
        • 스프링 프레임워크 기초
        • 스프링 핵심 원리 - 기본편
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편
        • 스프링 MVC
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
      • 🥑 Web Technoloy
      • 🚗 Backend Toy Project
        • 스프링 부트 게시판
        • Photogram
        • Baeg-won Clothing Gallery
      • 🥇 Problem Solving
        • Breadth-First Search
        • Depth-First Search
        • Backtracking
        • Simulation
        • Two-pointer
        • Binary Search
        • Greedy
        • Dynamic Programming
        • Minimum Spanning Tree
        • Dijkstra
        • Floyd warshall
      • ☕ Java
        • 명품 자바 에센셜
        • Applications
      • 🍦 JavaScript
        • JavaScript 기초
      • 🐧 Linux
        • 이것이 리눅스다(CentOS 8)
      • 📟 Database
        • 혼자 공부하는 SQL
      • 🧬 Data Structure
      • 🎬 HTML
      • 🎤 Tech Interview
      • 📌 etc
        • Unity 2D Raising Jelly Game
        • C++
        • 영어 쉐도잉
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Baeg-won
[Tech Interview] Part 4. Algorithm
상단으로

티스토리툴바