알고리즘 Flashcards
알고리즘 관련 개발자 면접 질문 정리
재귀란 무엇인가?
어떤 문제를 해결하기 위해 자신을 반복 호출하는 알고리즘 기술을 의미합니다.
재귀의 요소 중 기저 사례란 무엇인가?
재귀 호출을 멈추기 위한 조건으로, 더 이상 문제를 작은 문제로 나눌 수 없을 때 사용합니다. 기저 사례가 충족되면 함수는 더 이상 자신을 호출하지 않고 결과를 반환합니다.
재귀의 요소 중 재귀 사례란 무엇인가?
문제를 더 작은 문제로 나누고, 그 작은 문제를 해결하기 위해 다시 자기 자신을 호출하는 부분입니다.
DFS / BFS가 무엇인가?
두 알고리즘 모두 그래프 탐색 알고리즘으로 그래프나 트리 구조를 탐색할 때 사용됩니다. 특정 노드를 방문하고 연결된 노드들을 탐색하며, 모든 노드를 방문할 수 있습니다. 하지만 탐색 순서와 방식에서 차이가 있습니다.
DFS란 무엇인가?
깊이 우선 탐색으로 한 노드에서 출발하여 가능한 한 깊게 탐색한 후, 더 이상 갈 곳이 없으면 다시 돌아와 다른 경로를 탐색하는 방식입니다. 주로 재귀나 스택을 사용하여 구현합니다. 그리고 모든 경로를 탐색하여 해결책을 찾을 때 유용합니다.
BFS란 무엇인가?
너비 우선 탐색으로 루트 노드에서 시작하여 인접한 노드를 먼저 탐색하고, 그 다음 레벨의 노드들을 탐색하는 방식입니다. 주로 큐 자료구조를 사용하여 구현합니다. 그리고 최단 경로를 찾을 때 유용합니다.
버블 정렬을 설명하라.
인접한 두 원소를 비교하여 순서가 잘못된 경우 서로 교환하는 방식으로 작동합니다.
선택 정렬을 설명하라.
리스트에서 최소 또는 최대 원소를 찾아 리스트의 첫 번째 원소와 교환하는 방식으로 작동합니다.
삽입 정렬을 설명하라.
배열의 요소들을 하나씩 차례대로 정렬된 부분과 비교하여 적절한 위치에 삽입하는 방식으로 작동합니다.
선형 검색을 설명하라.
배열이나 리스트의 첫 번째 요소부터 마지막 요소까지 차례대로 확인하여 원하는 값을 찾는 방식입니다. 검색하려는 값이 배열에 존재하는지 확인하거나 그 위치를 반환합니다.
이진 검색을 설하라.
정렬된 배열에서 특정 값을 찾는 효율적인 알고리즘입니다. 배열을 반씩 나누어 검색하는 방식으로, 선형 검색보다 훨씬 빠른 시간 복잡도를 갖습니다.
A* 알고리즘을 설명하라.
그래프 탐색 알고리즘 중 하나로, 특히 최단 경로를 찾는 데 매우 효율적입니다. A* 알고리즘은 다익스트라 알고리즘과 유사하지만, 휴리스틱 함수를 사용하여 탐색 공간을 줄임으로써 더 효율적으로 동작합니다.
다익스트라 알고리즘과 A* 알고리즘의 차이는 무엇인가?
다익스트라 알고리즘은 시작 노드에서 모든 노드까지의 최단 경로를 찾으며 휴리스틱 함수를 사용하지 않습니다. 그리고 모든 가능한 경로를 동일한 방식으로 탐색합니다. A* 알고리즘은 시작 노드에서 목표 노드까지의 최단 경로를 찾으며 휴리스틱 함수를 사용하여 탐색을 더 효율적으로 만듭니다. 그리고 목표 지점에 가까운 경로를 우선적으로 탐색하여 탐색 공간을 줄입니다.
객체지향 프로그래밍이란 무엇인가?
프로그래밍 패러다임 중 하나로, 프로그램을 객체들의 집합으로 구성하여 개발하는 방법론입니다.
객체란 무엇인가?
데이터와 이를 처리하는 메소드를 함께 포함하는 하나의 단위입니다.
클래스란 무엇인가?
객체를 생성하기 위한 틀입니다. 객체의 속성과 메서드를 정의하며, 객체는 클래스의 인스턴스입니다.
추상 클래스와 인터페이스의 차이는 무엇인가? 왜 사용하는가?
추상 클래스는 일부 구현과 함께 기본적인 동작을 제공하고, 공통 기능을 공유할 수 있는 클래스를 만들 때 사용합니다. 인터페이스는 완전한 추상화를 제공하며, 다중 상속을 구현하거나 다양한 클래스가 동일한 동작을 하도록 표준화할 때 사용합니다.
캡슐화란 무엇인가?
캡슐화는 객체의 속성과 메서드를 하나로 묶고, 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 보호하는 것입니다.
상속이란 무엇인가?
새로운 클래스가 기존 클래스의 속성과 메서드를 물려받아 사용하는 것입니다.
다형성이란 무엇인가?
동일한 메서드나 연산자가 다양한 형태로 동작할 수 있는 능력입니다. 이는 주로 메소드 오버로딩과 메소드 오버라이딩을 통해 구현됩니다.
추상화란 무엇인가?
복잡한 시스템으로부터 필요한 부분만을 간추려 내어 모델링하는 것입니다.