춤추는 개발자

신입 개발자 직무면접 정리 - 알고리즘편 본문

Small talk/면접 준비

신입 개발자 직무면접 정리 - 알고리즘편

Heon_9u 2020. 10. 6. 22:35
728x90
반응형

정렬

 정렬이란 오름차순 또는 내림차순처럼 기준을 잡고 데이터를 재배열하는 것을 말합니다.

 염두해야할 사항은 정렬할 데이터의 양, 메모리 상태, row data의 정렬된 정도.

 

선택 정렬

 첫 번째 원소에서 시작해 배열 전체를 훑으면서 가장 작은 키를 가지는 원소를 찾아 첫 번째 원소와 맞바꾼다.

 시간 복잡도: O(N^2)

 

삽입 정렬

 한 번에 한 원소씩 이미 정렬된 다른 원소들과 비교하여 새 원소를 제 위치에 삽입하는 방식. 이미 정렬된 리스트의 경우 시간 복잡도는 O(N), 평균적으로 O(N^2)

 안정적인 정렬방법으로 소량의 데이터의 경우 최적.

 

퀵 정렬

 데이터 집합 내에서 pivot값을 고릅니다. 이를 기준으로 두 개의 집합으로 나눠서 한 쪽 집합에는 피벗 값보다 작은 것만, 다른 집합은 큰 것만 넣습니다. 더 이상 쪼갤 부분 집합이 없을 때까지 각각의 부분집합에 대해 피벗 설정 and 쪼개기 작업을 반복 수행.

 N이 1이 나올 때까지 반복해서 2로 나누는 횟수, 즉 log(N), 시간 복잡도: O(NlogN)

그러나 피벗을 잘못 고른 경우는 시간 복잡도가 O(N^2).

 

병합 정렬

 데이터 집합을 둘 이상의 부분집합으로 가르고, 각 부분집합을 정렬한 다음 부분집합을 다시 정렬된 형태로 합치는 방식.(분할 정복형 알고리즘)

 데이터가 10개이하일 때마다 삽입 정렬로 정렬하는 최적화 방법이 있다.

 평균 시간 복잡도: O(NlogN), O(N)수준의 메모리가 추가로 필요.

 

 

동적 계획법

 큰 문제를 여러 문제로 분할해서 최적해를 구하는 방식.

 

메모이제이션

 한번 계산한 결과를 재활용

 TOP-DOWN, BOTTOM-UP

 

비트마스킹

 비트 단위로 값을 보존. 방문체크하는데 사용.

 

투 포인터

 1차원 배열에서 Right, Left라는 두 점을 이용해 원하는 값을 얻는 형태. 연속된 값들을 이용해 푸는 문제에 사용.

 

슬라이딩 윈도우

 투 포인터와 유사하지만 차이점은 구간의 넓이가 동일하다는 점이 있습니다.

 전체 정보 중 이미 참조한 정보는 필요없다는 전제 하에 사용되기 때문에 메모리를 절약할 수 있다는 장점.

 

 

그리디 알고리즘

 부분 문제의 최적의 솔루션을 이용해서 기존 문제의 최적해를 구할 수 있는 방식.

 

 분할 정복

 부분으로 나누어서, 부분 문제를 정복하고 이를 통해 기존 문제를 해결

 

 

 

자료구조

List

순서가 있는 데이터의 집합, 중복이 허용.

인터페이스: ArrayList, LinkedList, vector

 

Set

순서를 유지하지 않고, 중복도 허용하지 않는 데이터의 집합.

인터페이스: HashSet, LinkedHashSet, TreeSet

 

Map

Key, Value쌍으로 이루어진 데이터의 집합

순서를 유지하지않고, key값은 중복을 허용하지않지만 value값은 중복을 허용.

인터페이스: HashMap, LinkedHashMap, TreeMap

 

foreach

for문 대신 사용되며 size를 건들필요없음, Stream의 인터페이스로 내부적으로 iterator가 적용.

foreach를 사용할 수 있는 자료구조는 iterable을 상속받은 클래스.

 

iterable

최상위 인터페이스로 Collection인터페이스에서 상속하고 있다.

추상메서드로 iterator를 갖고있다.

 

iterator

자료구조의 반복자 역할을 하며, hasNext(), next()라는 메소드를 오버라이딩.

 

generic

데이터 타입의 일반화

여러 타입의 값을 다룰 수 있는 변형이 가능한 자료구조

컬렉션을 사용할 때는 지정된 특정 타입만 가능.

E, T, V, K

 

generic와 non-generic차이점

 Generic은 데이터타입의 일반화를 의미하는 것으로 클래스나 메소드 내부에서 사용할 내부 데이터의 타입을 컴파일시에 미리 지정하는 방법이다. 이렇게 컴파일시 데이터 타입을 검사하면 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있고, 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.

 

 

 

 

728x90
반응형