[기술면접] 알고리즘

Algorithm Interview QnA

알고리즘 면접 질문과 답

Q1. 배열 뒤집기

void reverse(int *arr, int size){
  for(int i=0; i<size/2; i++){
    int temp = arr[i];
    arr[i] = arr[(size-1) - i];
    arr[(size-1) - i] = temp;
  }
}

Q2. 숫자 문자열을 정수로 만들기(atoi 구현)

int atoi(char *c){
  int value = 0;
  int positive = 1;

  if(*c = '\0') return 0;
  if(*c == '-') positive = -1;

  while(*c){
    if( *c > '0' && *c < '9' ){
      value = value * 10 + (*c - '0');
    }
    c++;
  }

  return value * positive;
}

Q3. 1~100 숫자가 들어있는 1억 사이즈 배열 중앙값 찾기

float median(vector<int> &arr){
  sort(arr.begin(), arr.end());

  if(arr.size() % 2 == 1){
    return (float)arr[arr.size() /2 ];
  }
  else {
    return ((float)arr[arr.size() / 2] + (float)arr[arr.size() / 2 + 1) / 2.0f;
  }
}

Q4. 버블 소트 구현

void bubble_sort(vector<int> &v){
  for(int i=0; i<v.size() - 1; i++){
    for(int j=1; j<v.size() - 1; j++){
      if(v[j-1] < v[j])
        swap(v[j-1], v[j]);
    }
  }
}

Q5. 선택 정렬 구현

void selection_sort(vector<int> &v){
  for(int i=0; i<v.size() - 1; i++){
    int tmp = i;
    for(int j=i+1; j<v.size(); j++){
      if(v[tmp] >= v[j]) tmp = j;
    }

    swap(v[i], v[tmp]);
  }
}

Q6. 삽입 정렬 구현

void insertion_sort(vector<int> &v){
  for(int i=1; i<v.size(); i++){
    int key=v[i];
    j = i-1;
    while(j >= 0 && key < v[j]){
      swap(v[j], v[j+1]);
      j--;
    }
    v[j+1] = key;
  }
}

Q7. 퀵 소트 구현