[TIL] 63일차 - 기술 면접 문답 목록

김유원·2024년 3월 25일
0

📝 24.03.25

15. 정렬 알고리즘

정렬 알고리즘이란 무엇이며, 사용 이유에 대해 설명해주세요.

답변

정렬 알고리즘이란 데이터들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 알고리즘입니다. 정렬을 통해 데이터 처리 및 검색의 효율성을 높일 수 있으므로 사용됩니다. 따라서 데이터의 크기와 상황에 따라 적절한 정렬 알고리즘을 사용하는 것이 중요합니다.

16. 선택 정렬과 버블 정렬

선택 정렬과 버블 정렬에 대해 설명해주시고, 코드를 작성해보세요.

답변

선택 정렬이란 배열에서 최소값(또는 최대값)을 찾아 맨 앞(또는 맨 뒤)와 교환하는 방법으로 정렬하는 알고리즘이고, 버블 정렬은 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘입니다.

선택 정렬

for(int i = 0; i < arr.Length - 1; i++)
{
    int minIndex = i; //첫번째 인덱스부터 기준을 잡고 확인

    for (int j = i + 1; j < arr.Length; j++) 
    { //기준 인덱스 뒤의 모든 숫자들 중 가장 최소값을 가진 인덱스 번호 찾기
        if (arr[j] < arr[minIndex])
        {
            minIndex = j;
        }
    }

	//기준 인덱스보다 작은 값의 인덱스가 뒤에 있다면 서로 바꾸기(swap)
    int temp = arr[i]; 
    arr[i] = arr[minIndex];
    arr[minIndex] = temp;
}

버블 정렬

int i, j, temp;

for(i=n-1; i>0; i--){
// 0 ~ (i-1)까지 반복
  for(j=0; j<i; j++){
  // j번째와 j+1번째의 요소가 크기 순이 아니면 교환
    if(list[j]<list[j+1]){
      temp = list[j];
      list[j] = list[j+1];
      list[j+1] = temp;
    }
  }
}

17. 스택, 힙 메모리

스택, 힙 메모리란 무엇이며 어떤 차이가 있는지 비교해서 설명해주세요.

답변

스택정적 메모리 할당 영역으로 함수 호출 및 지역 변수의 저장에 사용되며 후입선출(LIFO) 구조를 가지고 있습니다. 그에 반해 동적 메모리 할당 영역으로 동적 배열이나 연결 리스트 등의 동적 데이터 구조에 사용됩니다. 그리고 스택과 달리 먼저 들어온 데이터가 먼저 나가는 선입선출(FIFO) 구조를 가지고 있습니다.

18. 값 형식과 참조 형식

값 형식과 참조 형식의 차이에 대해 설명해주세요.

답변

값 형식은 변수가 직접 해당 데이터를 보유하고 있어, 변수가 할당된 값을 변경할 때 해당 값을 복사하는 구조입니다. 값 형식은 스택 메모리 영역에 저장됩니다. 참조 형식은 해당 변수가 데이터에 대한 메모리 주소를 보유하고 있어, 변수가 할당된 값을 변경할 때 해당 값을 참조하는 구조입니다. 참조 형식 변수는 힙 메모리 영역에 저장됩니다.

19. 자료구조의 종류

자료구조의 종류는 무엇이 있으며 각각 어떤 차이점이 있는지 설명해주세요

답변

C#에서 사용되는 자료구조의 종류로는 크기가 고정되어있는 배열, 그와 반대로 크기를 동적으로 할당할 수 있어 삽입과 삭제가 용이한 리스트, 선입선출 구조의 , 후입선출 구조의 스택, 값만 저장하는 다른 자료구조들과 달리 키와 값을 쌍으로 저장하는 딕셔너리 등이 있습니다.

꼬리질문: 위 자료구조는 무조건 좋은가요?

답변

모든 자료구조는 데이터의 크기나 사용되는 곳에 따라 적합한 곳이 다릅니다. 따라서 어떤 자료구조가 해당 알고리즘을 구현하기에 편리한지 늘 고려하여 설계하는 것이 중요합니다.

20. 객체 지향

객체지향이란 무엇인지 설명해주세요.

답변

객체 지향 프로그래밍이란 현실 세계의 사물을 모델링하여 프로그래밍하는 개발 방법론 중 하나입니다.

꼬리질문 a. 객체지향의 특징은 무엇이 있나요?

객체 지향의 특징으로는 크게 4가지가 있습니다. 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶는 캡슐화, 기존 클래스의 속성과 메서드를 자식 클래스에서도 사용할 수 있게 하는 상속, 같은 이름의 메서드가 다른 상황에서 다르게 동작할 수 있는 다형성, 공통의 속성을 묶어서 클래스로 표현하는 추상화가 바로 객체 지향의 주요 특징입니다.

꼬리질문 b. OOP란?

객체 지향 프로그래밍의 영어 약자입니다.

꼬리질문 c. SOLID 원칙은 무엇인가요?

SOLID 원칙이란 대표적인 객체 지향 프로그래밍 원칙입니다. 클래스는 하나의 책임만 가져야 한다는 단일 책임 원칙, 확장에 대해 열려 있고 수정에 대해서는 닫혀있어야 한다는 개방-폐쇄 원칙, 상위 타입은 하위 타입으로 교체할 수 있어야 한다는 리스코프 치환 원칙, 인터페이스는 클라이언트 요구 사항에 따라 적절히 분리되어야 한다는 인터페이스 분리 원칙, 추상화에 의존함으로써 구현의 변경이 발생해도 고수준 모듈에는 영향을 주지 않아야 한다는 의존 역전의 원칙들이 있습니다.

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보