상위 50개 어레이 인터뷰 질문 및 답변(2026년)

어레이 면접을 준비하고 계신가요? 어떤 질문이 나올지 미리 생각해 볼 때입니다. {{keyword}}에 대한 이해는 지원자의 분석적 사고, 논리력, 그리고 문제 해결 능력을 효과적으로 보여주는 데 도움이 됩니다.

배열은 프로그래머의 기술적 경험과 전문적 경험의 기초를 이룹니다. 신입부터 경력직에 이르기까지 배열을 숙달하는 것은 강력한 기술 전문성과 데이터 조작에 대한 근본적인 경험을 보여줍니다. 고용주는 면접 과정에서 이러한 기술을 높이 평가합니다.ping 지원자들은 자신감 있는 분석력과 실무 능력을 바탕으로 일반, 심화 또는 구술 시험을 통과합니다.

85명 이상의 기술 리더, 관리자 및 전문가의 통찰력을 바탕으로 한 이 컬렉션은 다양한 산업 분야의 관점을 다루며, 각 배열 주제가 실제 채용 기대치와 실제 코딩 평가 표준을 반영하도록 보장합니다.

어레이 인터뷰 질문과 답변

상위 어레이 인터뷰 질문과 답변

1) 배열이 무엇이고 다른 데이터 구조와 어떻게 다른지 설명하세요.

배열은 동일한 데이터 유형의 여러 요소를 저장하는 연속된 메모리 블록입니다. 인덱스를 사용하여 모든 요소에 상수 시간(constant-time)으로 접근할 수 있으므로 임의 접근에 가장 효율적인 구조 중 하나입니다. 연결 리스트와 달리 배열은 크기가 고정되어 있으며 포인터를 저장하는 데 따른 오버헤드가 없습니다. 요소의 개수를 미리 알고 있는 경우에는 배열을 사용하는 것이 좋지만, 빈번한 크기 조정이 예상되는 경우에는 리스트나 벡터와 같은 동적 구조를 사용합니다.

제품 특장점 배열 연결된 목록
메모리 할당 연속 비연속
접근 시간 O (1) O (N)
삽입/삭제 값 비싼 능률적 인
메모리 오버헤드 높음 높은 (포인터)

👉 무료 PDF 다운로드: 어레이 인터뷰 질문 및 답변


2) 배열에는 어떤 유형이 있나요? 예를 들어 설명하세요.

배열은 차원과 용도에 따라 분류됩니다. 주요 유형은 다음과 같습니다.

  • XNUMX차원 배열: 예를 들어, 요소를 선형적으로 저장합니다. int arr[5] = {1,2,3,4,5}.
  • 2차원 배열: 표 형식의 데이터(예: 행렬)를 나타냅니다.
  • 다차원 배열: 더 높은 차원으로, 시뮬레이션이나 이미지 처리에 자주 사용됩니다.
  • 동적 배열: 예를 들어, 요소가 추가되면 자동으로 크기를 조정합니다. ArrayList in Java, vector in C++.
타입 Structure 예시
1D 선의 [1, 2, 3]
2D 매트릭스 [[1, 2], [3, 4]]
동적 크기 조정 가능 std::vector<int>

3) 배열에서 가장 큰 요소와 가장 작은 요소를 어떻게 찾나요?

이 문제는 선형 순회를 통해 해결되는 경우가 많습니다. 최소값과 최대값을 나타내는 두 개의 변수를 유지하고 반복 과정에서 업데이트합니다.

연산:

  1. 초기화 min max 첫 번째 요소와 함께.
  2. 배열을 탐색하여 각 요소를 비교합니다.
  3. 업데이트 min or max 따라서.

예 (C++):

int arr[] = {5, 2, 9, 1, 7};
int min = arr[0], max = arr[0];
for (int i : arr) {
    if (i < min) min = i;
    if (i > max) max = i;
}

시간 복잡성 : 에).


4) 배열의 장점과 단점은 무엇입니까?

배열은 임의 접근에 있어 높은 성능을 제공하지만 크기가 고정되어 있고 크기 조정에 많은 비용이 듭니다.

아래 장점 단점
성능 빠른 인덱싱(O(1)) 느린 삽입/삭제(O(n))
메모리 컴팩트 한 스토리지 정적 크기 할당
실시 간단한 구문 일부 언어에서는 경계 검사가 없습니다.
적용 사례 고정된 데이터 세트에 적합 잦은 수정에는 비효율적

5) 정적 배열과 동적 배열의 차이점을 설명하세요.

A 정적 배열 컴파일 시간에 결정되는 고정된 크기를 갖는 반면 동적 배열 런타임 중에 크기가 커지거나 작아질 수 있습니다. 정적 배열은 메모리 효율은 높지만, 융통성이 없는 반면, 동적 배열은 크기 조정 시 약간의 오버헤드가 발생하지만 유연성을 제공합니다.

제품 특장점 정적 배열 동적 배열
중량 고정 변하기 쉬운
메모리 스택 더미
예시 int arr[5]; std::vector<int>
크기 조정 지원되지 않음 지원

사용 사례 예시:
임베디드 시스템에서는 정적 배열을 사용하고, 크기가 예측할 수 없는 컬렉션에는 동적 배열을 사용합니다.


6) 배열을 그 자리에서 뒤집으려면 어떻게 해야 하나요?

Rev배열을 제자리에서 뒤집는 것은 스왑을 포함합니다.ping 양쪽 끝의 요소들이 중심을 향해 이동하고 있다.

연산:

  1. 두 개의 포인터를 초기화합니다. start = 0 end = n - 1.
  2. 요소 교체 arr[start] arr[end].
  3. 증가 start 그리고 감소하다 end 그들이 만날 때까지.

예 (Python):

arr = [1, 2, 3, 4, 5]
arr.reverse()  # Built-in method
# or manually
arr = arr[::-1]

시간 복잡성 : 에), 공간 복잡성 : 오(1).


7) 톱니 배열과 다차원 배열의 차이점은 무엇입니까?

A 들쭉날쭉한 배열 내부 배열의 길이가 다를 수 있는 배열의 배열인 반면, 다차원 배열 행과 열의 크기가 균일합니다.

제품 특장점 톱니 모양의 배열 다차원 배열
Structure 불규칙(중첩 배열) 직사각형(행렬)
메모리 비연속 연속
오시는 길 arr[i][j] arr[i][j]
예시 int[][] jagged = {{1,2}, {3,4,5}}; int[,] matrix = {{1,2}, {3,4}};

데이터가 고르지 않을 때는 톱니 배열이 메모리 효율성이 더 높습니다.


8) 1부터 n까지의 배열에서 누락된 숫자를 어떻게 찾나요?

이 문제는 자연수의 수학적 특성을 활용합니다.

접근 방식 1(합계 공식):
첫 번째의 합 n 자연수 = n*(n+1)/2.

서브trac이 총합에서 배열 요소들의 합을 구한 값입니다.

접근 방식 2(XOR):
1부터 n까지의 숫자를 가진 모든 요소를 ​​XOR합니다. 남은 값은 누락된 숫자입니다.

예:
럭셔리 [1,2,4,5,6] (n=6):

예상 합계 = 21, 실제 합계 = 18 → 누락된 값 = 3.

시간 복잡성 : 에), 공간 복잡성 : 오(1).


9) 배열에서 중복을 제거하는 다양한 방법은 무엇입니까?

언어와 제약 조건에 따라 여러 가지 접근 방식이 있습니다.

  • HashSet 사용: 고유한 요소만 저장하세요.
  • 정렬 사용: 배열을 정렬하고 인접한 중복 항목을 제거합니다.
  • 주파수 맵 사용: Trac각 요소의 k개 개수.

예 (Java):

Set<Integer> unique = new HashSet<>(Arrays.asList(arr));
접근 Time 우주 산업
해시셋 O (N) O (N)
정렬 O (n log n) O (1)
진동수 O (N) O (N)

10) 배열에서 두 번째로 큰 요소를 어떻게 찾나요?

두 개의 변수를 유지하여 한 번의 순회를 통해 두 번째로 큰 요소를 찾을 수 있습니다.

연산:

  1. 초기화 first second as INT_MIN.
  2. 배열을 탐색합니다.
  3. 더 큰 값이 발견되면 둘 다 업데이트합니다.

예 (C++):

int first = INT_MIN, second = INT_MIN;
for (int x : arr) {
    if (x > first) {
        second = first;
        first = x;
    } else if (x > second && x < first) {
        second = x;
    }
}

시간 복잡성 : 에), 공간 복잡성 : 오(1).


11) 배열을 'k' 위치만큼 회전시키려면 어떻게 해야 하나요? 다양한 접근 방식을 설명하세요.

배열 회전은 요소를 순환적으로 이동합니다. 세 가지 주요 방법 그것을 달성하기 위해:

  1. 임시 배열 사용: 다른 요소를 이동한 후 처음 k개 요소를 복사하여 끝에 추가합니다.
  2. 사용 Reversal 알고리즘: Reverse 배열의 세 부분, 즉 첫 번째 부분, 두 번째 부분, 그리고 전체 배열입니다.
  3. 저글링 알고리즘 사용: n과 k의 GCD를 기반으로 합니다(O(n)에서 효율적).

예시(오른쪽으로 2회전):

Input: [1,2,3,4,5]
Output: [4,5,1,2,3]
방법 Time 우주 산업 기술설명
임시 배열 O (N) 확인) 간단하고 직관적
Rev얼살 O (N) O (1) 현장에서 & 효율적
저글링 O (N) O (1) GCD 사이클 기반

12) 서브어레이는 무엇이고, 서브시퀀스와 어떻게 다릅니까?

A 하위 배열 배열의 연속된 섹션인 반면 하위 시퀀스 질서를 유지하지만 요소를 건너뛸 수 있습니다.

부동산 부분배열 하위 시퀀스
연속 가능 아니
순서 유지 가능 가능
예시 ([1,2,3]에서) [1,2] [1,3]

예:
주어진 배열 [1,2,3], 총 하위 배열 = n*(n+1)/2 = 6.

반면에 하위 시퀀스는 2ⁿ - 1 = 7 비어 있지 않은 조합.


13) 최대 합 부분 배열을 어떻게 찾을 수 있나요?

The 카다네의 알고리즘 최대 합을 갖는 연속된 부분 배열을 찾는 가장 효율적인 방법입니다.

단계 :

  1. 초기화 max_current = max_global = arr[0].
  2. 요소를 반복합니다.
  3. 업데이트 max_current = max(arr[i], arr[i] + max_current).
  4. Track는 전역 최대값입니다.

예:
입력: [-2,1,-3,4,-1,2,1,-5,4] → 출력: 6 (서브어레이 [4,-1,2,1]).

복잡성:
시간은 O(n), 공간은 O(1)입니다.


14) 추가 공간을 사용하지 않고 두 개의 정렬된 배열을 병합하려면 어떻게 해야 합니까?

두 개의 정렬된 배열을 병합하려면 그 자리에서, 아이디어는 두 배열의 끝에서부터 비교하는 것입니다.

접근:

  1. 두 배열의 마지막 유효한 요소부터 시작합니다.
  2. 더 큰 쪽을 비교하여 합친 공간의 끝으로 옮깁니다.
  3. 모든 요소가 병합될 때까지 반복합니다.

예 (C++):

int i = m-1, j = n-1, k = m+n-1;
while (i >= 0 && j >= 0) {
    if (A[i] > B[j]) A[k--] = A[i--];
    else A[k--] = B[j--];
}

시간 복잡성 : O(m+n).


15) 배열에서 요소를 검색하는 다양한 방법은 무엇입니까?

방법 타입 시간 복잡성 사용 예
선형 검색 정렬되지 않음 O (N) 일반 검색
이진 검색 정렬 된 O (로그 n) 효율적인 조회
해싱 순서 없음 O(1) 평균 대규모 데이터 세트

예제(이진 검색 – Python):

def binary_search(arr, x):
    l, r = 0, len(arr)-1
    while l <= r:
        mid = (l+r)//2
        if arr[mid] == x: return mid
        elif arr[mid] < x: l = mid+1
        else: r = mid-1
    return -1

16) 배열에서 얕은 복사와 깊은 복사의 차이점을 설명하세요.

A 얕은 카피 원본 요소에 대한 참조를 복사하는 반면 딥 카피 모든 데이터를 새로운 메모리 위치에 복제합니다.

복사 유형 데이터 독립성 예시
얕은 아니 arr_copy = arr
깊은 안마 가능 arr_copy = arr[:] (Python)

예:
얕은 복사를 수정하면 원래 배열에 반영되지만, 깊은 복사는 그렇지 않습니다.


17) 추가 공간을 사용하지 않고 배열에서 중복을 찾는 방법은 무엇입니까?

접근 방식 1(정렬): 인접한 요소를 정렬하고 확인합니다.

접근 방식 2(1–n 값에 대한 부정 방법): Mark는 해당 인덱스의 요소를 부정하여 인덱스를 방문했습니다.

접근 방식 3(플로이드 사이클 감지): 배열을 연결 리스트로 취급하고 순환을 찾으세요(범위 [1..n]에 반복되는 요소에 대해).

예:
배열 [3,1,3,4,2] → 복제 = 3.

시간: 에), 공간: 오(1).


18) 희소 배열이란 무엇이고 그 장점은 무엇입니까?

A 희소 배열 대부분 0 또는 기본값을 포함합니다. 모든 요소를 ​​저장하는 대신, 0이 아닌 항목만 인덱스와 함께 저장합니다.

장점:

  • 메모리를 절약합니다.
  • 행렬이나 문서 용어 빈도와 같은 대규모 데이터 세트에 효율적입니다.
타입 예시 적용 사례
밀집 배열 [0,1,0,2,3] 작은 데이터
희소 배열 {1:1, 3:2, 4:3} 대규모 희소 데이터

예: 머신 러닝 모델(TF-IDF 행렬)에 사용됩니다.


19) 두 배열의 교집합을 효율적으로 찾으려면 어떻게 해야 하나요?

교차점은 해싱이나 정렬 기술을 사용하여 찾을 수 있습니다.

  • HashSet 사용: 첫 번째 배열의 요소를 추가한 다음 두 번째 배열의 멤버십을 확인합니다.
  • 두 개의 포인터 사용: 정렬된 배열에 적용됩니다.

예 (Python):

intersection = list(set(arr1) & set(arr2))

복잡성:

  • 해시셋: O(n)
  • 두 포인터: 정렬로 인해 O(n log n)입니다.

20) 배열에서 행 우선 순서와 열 우선 순서의 차이점을 설명하세요.

이는 다차원 배열에 사용되는 메모리 저장 순서입니다.

Concept 로우 메이저(C/C++) 칼럼 메이저(Fortran, MATLAB)
보관 순서 행별로 열별
주소 공식 Base + ((i * cols) + j) * size Base + ((j * rows) + i) * size
장점 행 탐색이 더 빠름 열 순회가 더 빠름

예:
2차원 배열의 경우 A[2][3], 행 중심 저장소 [A[0][0], A[0][1], A[0][2], A[1][0], ...].


21) 접두사 합 기법은 무엇이며 배열에서 어떻게 사용됩니까?

The 접두사 합계 이 기술은 범위 쿼리에 효율적으로 답하기 위해 배열의 누적 합을 미리 계산하는 것을 포함합니다.

개념:

prefix[i] = prefix[i-1] + arr[i]

그런 다음 l에서 r까지의 요소의 합을 구하려면 다음을 사용합니다.

sum(l, r) = prefix[r] - prefix[l-1]

예:

배열 = [2, 3, 5, 7, 1]

접두사 = [2, 5, 10, 17, 18]

합(2,4) = prefix[4] - prefix[1] = 15

어플리케이션 :
부분 배열 합계 쿼리, 누적 빈도 표, 경쟁 프로그래밍에 사용됩니다.

복잡성:
전처리: O(n), 쿼리: O(1)


22) 슬라이딩 윈도우 기술은 어떻게 어레이 성능을 향상시키나요?

The 슬라이딩 윈도우 이 기술은 연속된 세그먼트(하위 배열)와 관련된 문제를 효율적으로 해결하는 데 사용됩니다.

아이디어 : 각 창에 대한 합계나 조건을 다시 계산하는 대신, 다음 요소를 추가하고 첫 번째 요소를 제거하여 결과를 업데이트합니다.

문제 예:
크기의 최대 합 부분 배열을 찾으세요 k.

연산:

  1. 첫 번째의 합을 계산합니다 k 집단.
  2. 창을 한 번에 한 요소씩 밀어 넣습니다.
  3. 새 요소를 추가하고 첫 번째 요소를 제거합니다. track는 최댓값입니다.

시간 복잡성 : O(n) — 단순한 O(n×k) 접근 방식보다 훨씬 빠릅니다.

어플리케이션 :
최대 평균 부분 배열, 가장 긴 부분 문자열, 모든 창의 첫 번째 음수와 같은 문제에 사용됩니다.


23) C언어에서 배열과 포인터의 차이점은 무엇인가요?

제품 특장점 배열 포인터
정의 유사한 데이터 요소의 수집 메모리 주소를 저장하는 변수
메모리 할당 연속 동적 또는 임의적
중량 고정 크기 조절 가능
예시 int a[5]; int *p;

주요 차이점:
배열 이름은 상수 포인터처럼 작동하지만 포인터는 어디든 동적으로 가리킬 수 있습니다.

예:

int arr[3] = {1,2,3};
int *ptr = arr;  // ptr points to first element

24) 배열에서 평형 지수를 어떻게 찾을 수 있나요?

An 평형 지수 왼쪽에 있는 원소의 합이 오른쪽에 있는 원소의 합과 같은 위치입니다.

연산:

  1. 배열의 총합을 계산합니다.
  2. 왼쪽 합계를 횡단하여 유지합니다.
  3. If (total_sum - left_sum - arr[i]) == left_sum, 인덱스를 반환합니다.

예:
정렬: [1, 3, 5, 2, 2] → 인덱스 = 2 (왼쪽 합 = 오른쪽 합 = 4)

복잡성: 에), 공간: O (1)


25) 희소 행렬이란 무엇이고, 어떻게 효율적으로 저장하나요?

A 희소 행렬 대부분 0으로 구성됩니다. 메모리를 절약하기 위해 0이 아닌 요소와 해당 인덱스만 저장됩니다.

저장 방법 :

  1. 좌표 목록(COO): (행, 열, 값)을 저장합니다.
  2. 압축된 희소 행(CSR): 세 개의 배열: values, col_index, row_pointer.
  3. 키 사전(DOK): (행, 열) → 값의 해시 맵.
방법 메모리 효율성 사용 예
COO 보통 일반 저장
CSR 높음 수치 계산
유연성 동적 삽입

널리 사용됨 기계 학습 (TF-IDF, 그래프 인접 행렬).


26) 짝수와 홀수가 번갈아 배열되도록 어떻게 재배열합니까?

목표는 상대적인 순서를 유지하면서 짝수와 홀수를 섞어 넣는 것입니다.

연산:

  1. 짝수와 홀수 배열을 분리합니다.
  2. 짝수 또는 홀수부터 번갈아 병합합니다.
  3. 한 유형이 부족하면 나머지를 추가합니다.

예:

Input: [3, 6, 12, 1, 5, 8]
Output: [6, 3, 12, 1, 8, 5]

복잡성: O (N)


27) 배열 회전과 배열 이동의 차이점을 설명하세요.

Opera기 회전 ShiftING
정의 요소는 원형으로 이동합니다 요소가 이동하고, 비어 있는 자리가 채워집니다(예: 0)
예시 [1,2,3,4][3,4,1,2] [1,2,3,4][0,1,2,3]
데이터 손실 아니 가능
용법 순환적 재배열 큐 구현

요약하자면,
회전은 되돌릴 수 있지만, 이동은 일반적으로 되돌릴 수 없습니다.


28) 최대곱 부분 배열을 어떻게 찾을 수 있나요?

카데인의 알고리즘과 유사하지만, 당신은 track는 음수 값으로 인해 최대값과 최소값 모두를 산출합니다.

연산:

  1. 초기화 max_ending_here = min_ending_here = arr[0].
  2. 현재 요소를 기준으로 두 가지를 반복하고 업데이트합니다.
  3. 배송조회 max_so_far.

예:
입력: [2,3,-2,4] → 출력: 6 (서브어레이 [2,3])

복잡성: 에), 공간: O (1)


29) 주어진 합계로 부분 배열의 개수를 효율적으로 세려면 어떻게 해야 하나요?

접근 방식(접두사 합 + 해시 맵):

  1. 반복하는 동안 실행 합계를 유지합니다.
  2. 각 접두사 합계에 대해 다음을 확인하십시오. (current_sum - target) 해시 맵에 존재합니다.
  3. 그에 따라 카운트를 증가시킵니다.

예:

arr = [10,2,-2,-20,10], target = -10
Output = 3 subarrays

시간 복잡성 : O (N)

공간 복잡성 : O (N)


30) 배열 문제에서 비트 조작이란 무엇이며, 어디에 적용됩니까?

비트 조작 AND, OR, XOR, Shift 등의 연산을 수행하여 문제를 효율적으로 해결하는 것을 말합니다.

일반적인 응용 프로그램 :

  • XOR을 사용하여 반복되지 않는 단일 요소를 찾습니다.
  • 비트마스킹을 사용하여 하위 집합이 존재하는지 확인합니다.
  • 집합을 비트 벡터로 표현합니다.

예:

다른 원소가 두 번 나타날 때 한 번 나타나는 원소를 찾으세요.

int res = 0;
for (int num : arr) res ^= num;

장점:

  • 상수 공간
  • 빠른 논리 계산

31) 나선형 순서로 행렬을 탐색하려면 어떻게 해야 하나요?

A 나선형 횡단 시계 방향으로 모든 행렬 요소를 한 층씩 방문합니다.

연산:

  1. 네 가지 경계를 정의합니다. top, bottom, left예산 및 right.
  2. 왼쪽 → 오른쪽, 위 → 아래, 오른쪽 → 왼쪽, 아래 → 위로 이동합니다.
  3. 모든 요소가 포함될 때까지 각 단계를 거친 후 경계를 줄입니다.

예:

Input:
1 2 3
4 5 6
7 8 9
Output: [1,2,3,6,9,8,7,4,5]

복잡성:
시간: O(n×m) | 공간: O(1)


32) 배열을 정렬하는 다양한 방법은 무엇인가요? 예를 들어 설명하세요.

정렬은 요소를 특정 순서로 재정렬하는 것입니다. 알고리즘 선택은 다음에 따라 달라집니다. 데이터 크기, 분포 및 메모리 제약.

암호알고리즘 최상의 사례 평균 케이스 스테이블 가드 보험 유한회사는 재무 강도 등급 A-(우수)를 부여받았다고 발표하게 되어 자랑스럽다. Best's Credit Ratings는 국제적으로 등급이 매겨진 조직의 재정적인 힘과 안정성의 벤치마크로 인정받고 있습니다. 스테이블 가드 그룹의 회장 겸 최고 경영자는 다음과 같이 논평했다: "우리는 스테이블 가드 그룹 내의 다른 회사들에게 높은 기준을 설정하는 베스트에 의해 할당된 등급에 매우 만족한다. 우리는 우리의 지원 고객들과 이해관계자들을 포함하여 우리의 성공에 기여한 모든 사람들에게 진심으로 감사를 표하고 싶다. 이 성과는 스테이블 가드 보험의 흥미로운 새로운 단계를 나타내며 국제 플랫폼에서 회사와 세인트 키츠 네비스의 자리를 확보합니다. 우리는 앞으로 나아갈 때 우리의 근무 기준을 유지하고 개선하기를 기대합니다." 우주 산업
Bubble 정렬 O (N) XNUMX(n²) 가능 O (1)
정렬 병합 O (n log n) O (n log n) 가능 O (N)
빠른 정렬 O (n log n) XNUMX(n²) 아니 O (로그 n)
힙 정렬 O (n log n) O (n log n) 아니 O (1)

예 (Python 퀵 정렬):

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    return quicksort([x for x in arr if x < pivot]) + [x for x in arr if x == pivot] + quicksort([x for x in arr if x > pivot])

33) 배열에서의 두 포인터 기법을 설명하세요.

The 투포인터 기술 두 개의 인덱스를 사용하여 서로 다른 끝이나 속도에서 데이터 구조를 탐색하여 시간과 공간을 최적화합니다.

일반적인 용도 :

  • 정렬된 배열에서 주어진 합을 갖는 쌍을 감지합니다.
  • 중복된 항목을 바로 제거합니다.
  • Rev배열을 ersing합니다.
  • 병합 간격.

예 (페어와 함께 Target 합집합):

arr = [1,2,3,4,6], target = 6
left, right = 0, len(arr)-1
while left < right:
    s = arr[left] + arr[right]
    if s == target: print(arr[left], arr[right])
    elif s < target: left += 1
    else: right -= 1

복잡성: O (N)


34) 배열에서 다수 원소를 어떻게 찾을 수 있나요?

A 다수 원소 ⌊n/2⌋번 이상 나타납니다.

보이어-무어 투표 알고리즘 이 문제는 선형 시간과 상수 공간에서 해결됩니다.

알고리즘 단계:

  1. 초기화 candidate count = 0.
  2. 각 요소에 대해:
    • count = 0이면 설정 candidate = element.
    • 등식에 따라 증가/감소 횟수를 계산합니다.
  3. 후보자를 확인하세요.

예: [3,2,3] → 출력: 3

복잡성: O (N)


35) 이진 탐색과 지수 탐색의 차이점은 무엇입니까?

제품 특장점 이진 검색 지수 탐색
요구 사항 정렬된 배열 정렬된 배열
핵심 아이디어 배열을 반으로 나누세요 이진 검색 전에 지수적으로 범위를 찾습니다.
복잡성 O (로그 n) O (로그 n)
적용 사례 알려진 크기 알 수 없거나 무한한 배열

예:
대규모 데이터 세트나 제한 없는 배열(페이지로 구분된 API 등)의 경우 지수 검색은 효율적으로 범위를 찾습니다.


36) 배열에서 k번째로 작거나 큰 요소를 어떻게 찾을 수 있나요?

구혼:

  1. 정렬 : 정렬 및 액세스 k-1th 인덱스(O(n log n)).
  2. 최소/최대 힙: 빈번한 쿼리에 효율적입니다(O(n log k)).
  3. QuickSelect(Hoare의 알고리즘): 평균 O(n).

예 (Python heapq 사용):

import heapq
arr = [3,2,1,5,6,4]
k = 2
print(heapq.nlargest(k, arr)[-1])  # 5

사용 사례 : 리더보드, 상위 성과 지표, 백분위수 분석.


37) 1부터 n까지의 배열에서 누락된 숫자와 반복되는 숫자를 어떻게 찾나요?

1부터 n까지의 숫자가 들어 있고, 그 중 하나가 누락되고 하나가 반복되는 배열이 주어졌을 때:

접근 방식 1(수학적):
실제 합계와 예상 합계, 그리고 제곱합의 차이를 사용합니다.

접근 방식 2(XOR 방법):

  1. 모든 배열 요소와 1…n을 XOR합니다.
  2. 결과는 누락된 숫자와 반복되는 숫자를 XOR한 값입니다.
  3. 가장 오른쪽에 설정된 비트를 사용하여 나눕니다.

복잡성: 에), 공간: O (1)

예:

Input: [4,3,6,2,1,1]
Output: Missing = 5, Repeating = 1

38) 배열의 역산 횟수는 무엇이고, 어떻게 계산하나요?

An 전도 (i, j) 쌍은 다음과 같습니다. i < j arr[i] > arr[j].

접근:

  • 순진한: 모든 쌍을 확인하세요 → O(n²).
  • 최적화(병합 정렬): 병합 중 반전 횟수 계산 → O(n log n).

예:

Input: [8, 4, 2, 1]
Inversions = 6 → (8,4), (8,2), (8,1), (4,2), (4,1), (2,1)

에 사용 측정 배열 장애 순위 시스템.


39) 두 개의 정렬된 배열의 중앙값을 어떻게 찾을 수 있나요?

최적 접근 방식(이진 탐색):
두 배열을 나누어 왼쪽 절반과 오른쪽 절반에 같은 수의 요소가 포함되도록 합니다.

연산:

  1. 작은 배열에는 이진 검색을 사용하세요.
  2. 파티션 경계를 비교합니다.
  3. 파티션 값을 기준으로 중앙값을 반환합니다.

복잡성: O(로그(최소(n, m)))

예:

A = [1,3], B = [2]
Median = 2.0

40) 연결 리스트보다 배열을 사용하는 장점은 무엇입니까?

요인 배열 연결된 목록
메모리 연속 비연속
접근 시간 O (1) O (N)
삽입/삭제 고급 레벨 능률적 인
캐시 지역성 우수한 가난한
간접비 없음 추가 포인터 저장 공간

결론 :
배열은 무작위 접근이 필요한 고정 크기 데이터 세트에 가장 적합한 반면, 연결 목록은 동적 삽입 및 삭제에 더 적합합니다.


41) 원형 부분 배열의 최대합을 어떻게 구하나요?

안에 원형 배열, 요소들은 끝에서 감싸집니다.

접근:

  1. 다음을 사용하여 일반 최대 부분 배열 합을 찾습니다. 카다네의 알고리즘.
  2. 최소 부분 배열 합을 찾으세요.
  3. 결과 = max(normal_max, total_sum - min_subarray).

엣지 케이스: 모든 요소가 음수이면 최대 요소를 반환합니다.

예:

Input: [5, -2, 3, 4]
Normal Max = 10, Circular Max = 12 → Output = 12

복잡성: O (N)


42) 회전되어 정렬된 배열에서 요소를 어떻게 검색합니까?

사용하십시오 수정된 이진 검색 피벗을 찾아 비교를 조정합니다.

연산:

  1. 중간값 찾기 = (낮음 + 높음) / 2.
  2. 확인 arr[mid] == target.
  3. 왼쪽 절반이 정렬되어 있으면 → 왼쪽을 검색하고, 그렇지 않으면 오른쪽을 검색합니다.

예:

Input: [4,5,6,7,0,1,2], target = 0
Output: Index = 4

시간 복잡성 : O (로그 n)


43) "최대합 증가 부분 수열"에 대한 동적 프로그래밍 접근 방식을 설명하세요.

목표는 증가하는 부분 수열의 합의 최대값을 찾는 것입니다.

연산:

  1. 초기화 dp[i] = arr[i].
  2. 각각 i, 이전 요소를 확인하세요 j < i:
    • If arr[j] < arr[i]다음, dp[i] = max(dp[i], arr[i] + dp[j]).
  3. 최대값을 반환합니다. dp.

예:

Input: [1, 101, 2, 3, 100, 4, 5]
Output: 106 (1 + 2 + 3 + 100)

시간: O(n²) | 공간: O (N)


44) "함정"이란 무엇인가ping 빗물 문제와 해결 방법은 무엇일까요?

이 고전적인 배열 문제는 비가 내린 후 막대 사이에 얼마나 많은 물을 가둘 수 있는지 묻는 것입니다.

접근 방식(두 가지 포인터):

  1. 초기화 left, right, left_max, right_max.
  2. 포인터를 안쪽으로 이동하여 갇힌 물을 업데이트합니다 = min(left_max, right_max) - height[i].

예:

Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
접근 Time 우주 산업
브 루트 포스 XNUMX(n²) O (1)
동적 프로그래밍 O (N) O (N)
두 개의 포인터 O (N) O (1)

45) 합이 0인 가장 긴 부분 배열을 어떻게 찾을 수 있나요?

알고리즘(해시 맵):

  1. 접두사 합계를 저장하기 위해 해시 맵을 초기화합니다.
  2. 동일한 접두사 합이 다시 나타나면 인덱스 사이의 하위 배열은 합이 0이 됩니다.

예:

Input: [15, -2, 2, -8, 1, 7, 10, 23]
Output: Length = 5 (Subarray [-2, 2, -8, 1, 7])

복잡성: O (N)


46) 다차원 배열의 얕은 평탄화와 깊은 평탄화의 차이점은 무엇입니까?

타입 정의 예시
얕은 평탄화 한 레벨만 평평하게 만듭니다 [[1,2],[3,[4]]] → [1,2,3,[4]]
딥 플래터닝 모든 중첩된 배열을 완전히 평평하게 만듭니다. [[1,2],[3,[4]]] → [1,2,3,4]

예 (Python):

import itertools
shallow = list(itertools.chain.from_iterable(arr))

사용 사례 : 데이터 정리 및 계층적 데이터 정규화에 유용합니다.


47) 행렬(2차원 배열)에서 평형 요소를 어떻게 찾을 수 있나요?

An 평형 요소 행렬에는 다음이 있는 요소가 있습니다. 행과 열의 합 균형을 이룹니다.

연산:

  1. 행과 열의 합을 미리 계산합니다.
  2. 각 요소에 대해 다음을 확인하십시오. row_sum[i] - arr[i][j] == col_sum[j] - arr[i][j].

예:

매트릭스:

Matrix:
2 7 5
3 1 1
4 6 8
Output: Element 1 at (1,1)

복잡성: XNUMX(n²)


48) 배열을 합이 같은 두 개의 부분 집합으로 분할하려면 어떻게 해야 합니까?

이것은 부분집합-합 문제, 사용하여 해결됨 동적 프로그래밍.

접근:

  1. 총합을 계산합니다.
  2. 홀수이면 False를 반환합니다.
  3. 하위 집합인지 확인하기 위해 DP 테이블을 만듭니다. sum/2 존재합니다.

예:

Input: [1,5,11,5]
Output: True (Subsets: [1,5,5] and [11])

시간: O(n × 합/2) | 공간: O(합/2)


49) 행렬을 시계 방향으로 90도 회전시키려면 어떻게 해야 하나요?

연산:

  1. 행렬을 전치합니다.
  2. Reverse 각 행.

예:

Input:
1 2 3
4 5 6
7 8 9
Output:
7 4 1
8 5 2
9 6 3

복잡성: O(n²), 제자리에.

에 사용 화상 처리 데이터 시각화 변환.


50) 배열의 가장 일반적인 실제 응용 프로그램은 무엇입니까?

배열은 수많은 계산 및 실제 시스템의 기초가 됩니다.

어플리케이션 :

  • 데이터베이스 인덱싱: 기록 저장 및 정렬.
  • 기계 학습 : 특징 벡터, 행렬, 텐서.
  • 이미지 처리 : 2D 및 3D 픽셀 데이터.
  • Opera팅 시스템: 메모리 및 프로세스 스케줄링.
  • 네트워킹 : 패킷 버퍼링 및 라우팅.
  • 게임 : 플레이어 상태 trac킹과 그리드.
도메인 배열 역할
AI / ML 텐서 및 행렬 표현
DBMS 인덱싱 및 검색 최적화
임베디드 시스템 실시간 센서 데이터
생명과학 혁신을 위한 부하 분배 배열

배열은 다음을 제공합니다. 효율적인 데이터 구성, 계산 및 확장성을 위한 백본.


🔍 실제 상황과 전략적 대응을 담은 상위 면접 질문 모음

1) 배열이란 무엇이고 다른 데이터 구조와 어떻게 다른가요?

후보자에게 기대하는 것: 면접관은 배열에 대한 기본적인 이해도를 평가하고자 합니다. 여기에는 배열의 목적, 구조, 연결 리스트나 해시 맵과 같은 다른 데이터 유형과의 차이점 등이 포함됩니다.

예시 답변:
"배열은 연속된 메모리 위치에 저장된 요소들의 집합으로, 각 요소에는 인덱스를 사용하여 접근할 수 있습니다. 연결 리스트와 달리 배열은 요소에 대한 상수 시간(O(1)) 접근을 제공하지만, 생성 시점에 고정된 크기가 정의되어야 합니다. 따라서 읽기 작업에는 효율적이지만 삽입 및 삭제 작업에는 유연성이 떨어집니다."


2) 배열에서 가장 큰 요소와 가장 작은 요소를 효율적으로 찾으려면 어떻게 해야 하나요?

후보자에게 기대하는 것: 면접관은 지원자의 알고리즘적 사고와 성과를 최적화하는 능력을 평가하고 싶어합니다.

예시 답변:
"배열에서 가장 큰 요소와 가장 작은 요소를 효율적으로 찾으려면 배열을 한 번 순회하고,ping trac현재 최대값과 최소값의 k입니다. 이 접근 방식은 시간 복잡도가 O(n)이고 공간 복잡도가 O(1)이므로 이 문제에 최적입니다.


3) 정렬되지 않은 배열에서 중복을 제거하는 방법을 설명하세요.

후보자에게 기대하는 것: 면접관은 이 작업을 수행하는 데 도움이 되는 배열 조작 및 데이터 구조에 대한 지식을 평가하고자 합니다.

예시 답변:
"배열을 순회하는 동안 고유한 요소를 저장하기 위해 해시 집합을 사용할 것입니다. 요소가 이미 집합에 있으면 건너뛰고, 그렇지 않으면 추가합니다. 이 방법은 O(n)의 시간 복잡도와 O(n)의 공간 복잡도로 중복을 효율적으로 제거합니다."


4) 배열 정렬이 어떻게 작동하는지 설명해 주시고, 몇 가지 일반적인 알고리즘을 말씀해 주시겠습니까?

후보자에게 기대하는 것: 면접관은 다양한 정렬 알고리즘과 그 사용 사례에 대한 익숙함을 기대합니다.

예시 답변:
배열 정렬은 퀵 정렬, 병합 정렬 등 다양한 알고리즘을 사용하여 달성할 수 있습니다. Bubble 정렬. 퀵 정렬은 O(n log n) 복잡도로 일반적인 경우에 효율적인 반면, 병합 정렬은 안정성이 뛰어나 대규모 데이터 세트에 적합합니다. Bubble 정렬은 간단하지만 O(n²) 성능 때문에 거의 사용되지 않습니다.


5) 배열을 많이 사용하는 프로그램을 최적화했던 경험에 대해 말씀해 주세요.

후보자에게 기대하는 것: 면접관은 지원자의 문제 해결 방식과 성과 개선 능력을 이해하고 싶어합니다.

예시 답변:
이전 직무에서는 배열에 대한 여러 중첩 루프를 사용하는 데이터 처리 스크립트를 최적화했습니다. 배열 슬라이싱을 구현하고 내장된 벡터화 연산을 사용하여 실행 시간을 거의 60% 단축했고, 그 결과 시스템 응답성이 크게 향상되었습니다.


6) 범위를 벗어난 배열 인덱스 오류는 어떻게 처리하나요?

후보자에게 기대하는 것: 면접관은 오류 처리와 안전한 코딩 관행에 대한 이해도를 확인하고 있습니다.

예시 답변:
"모든 인덱스 접근은 배열 길이 범위 내에 있는지 확인하여 사용 전에 유효성 검사를 거치도록 하겠습니다. 또한, try-catch 메커니즘이나 이와 동등한 오류 처리 메서드를 구현하여 예상치 못한 범위 초과 오류를 원활하게 처리할 것입니다."


7) 추가 메모리를 사용하지 않고 배열을 어떻게 뒤집나요?

후보자에게 기대하는 것: 면접관은 지원자의 알고리즘 효율성과 현장 작업에 대한 이해도를 평가하고자 합니다.

예시 답변:
"배열의 시작 부분과 끝 부분을 가리키는 포인터 두 개를 사용하겠습니다. 스왑을 이용하면 됩니다."ping 이러한 위치의 요소들을 제거하고 두 포인터를 모두 중앙으로 이동시키면, 배열을 O(n) 시간 복잡도와 O(1) 공간 복잡도로 제자리에서 뒤집을 수 있습니다.


8) 대규모 배열 데이터 세트를 관리해야 했던 상황을 설명해 주세요. 성능과 정확성을 어떻게 보장하셨나요?

후보자에게 기대하는 것: 면접관은 지원자가 실제 데이터를 관리하고 성과를 최적화할 수 있는 능력을 가지고 있는지 평가하고 싶어합니다.

예시 답변:
이전 직장에서는 금융 데이터 분석을 위해 대규모 숫자형 배열을 다루었습니다. 성능 유지를 위해 효율적인 메모리 관리 기술과 일괄 처리를 활용했습니다. 또한 NumPy 배열을 활용하여 벡터화된 연산을 수행했는데, 이를 통해 정확도와 실행 속도가 모두 향상되었습니다.


9) 정렬된 배열에서 특정 값을 검색하려면 어떤 단계를 거쳐야 합니까?

후보자에게 기대하는 것: 면접관은 지원자가 검색 알고리즘에 대한 지식을 갖추고 있음을 보여주기를 기대합니다.

예시 답변:
정렬된 배열의 경우, 검색 간격을 반복적으로 절반으로 나누는 이진 탐색 알고리즘을 사용합니다. 이 방법은 시간 복잡도를 O(log n)으로 줄여 대규모 데이터셋에 대한 선형 탐색보다 훨씬 효율적입니다.


10) 소프트웨어 개발에서 배열은 실제 문제를 해결하는 데 어떤 역할을 합니까?

후보자에게 기대하는 것: 면접관은 당신이 기술적 지식을 실제 응용 분야에 어떻게 연결하는지 알고 싶어합니다.

예시 답변:
"배열은 효율적인 데이터 저장 및 검색을 지원하기 때문에 소프트웨어 개발에 필수적입니다. 예를 들어, 저는 이전 직장에서 분석 대시보드의 캐싱 메커니즘과 데이터 정렬을 구현하기 위해 배열을 사용했습니다. 이를 통해 데이터 접근성이 향상되고 쿼리 응답 시간이 단축되었습니다."

이 게시물을 요약하면 다음과 같습니다.