내가 좋아하는 소프트웨어 엔지니어링 인터뷰 질문: 중앙값 계산
2 hours ago
2
- 기술 인터뷰의 작은 구현 문제는 퍼즐보다 효과적일 수 있으며, 중앙값 계산은 기본 코딩 능력과 설계 감각을 함께 드러냄
- 정렬이 필요한 문제라서 함수가 직접 정렬할지, 호출자가 정렬할지, 원본 배열을 변경해도 되는지 같은 API 논의로 자연스럽게 이어짐
- 홀수와 짝수 길이를 나누는 분기, 인덱스 계산, off-by-one 실수는 후보자의 디버깅 과정을 관찰하기 좋음
- 중앙값과 평균의 차이, 테스트 작성 용이성, Python의 statistics 표준 라이브러리 지식까지 짧은 문제 안에서 확인할 수 있음
- 예시 구현은 빈 리스트에서 ValueError를 던지고, sorted()로 복사 정렬한 뒤 짝수 길이는 가운데 두 값의 평균, 홀수 길이는 가운데 값을 반환함
중앙값 문제가 인터뷰에 적합한 이유
- 좋은 기술 인터뷰 질문은 퍼즐처럼 꼬아낸 문제가 아니라, 직관적인 구현 안에서 더 깊은 주제를 꺼낼 수 있어야 함
- “숫자 배열을 받아 중앙값을 반환하는 함수를 작성하라”는 질문은 후보자가 실제로 프로그래밍할 수 있는지 확인하는 Fizz Buzz류 신호로 쓰기 좋음
- 배열 값을 하나의 결과로 줄이는 작업은 기본 역량에 해당하며, 문제 자체도 충분히 작아 대화와 디버깅을 함께 보기 쉬움
구현 과정에서 드러나는 판단 지점
- 중앙값 계산에는 먼저 정렬이 필요함
- 함수가 직접 정렬할지, 호출자가 정렬된 배열을 넘겨야 할지 정해야 함
- 배열이 참조로 전달될 때 원본을 바꿔도 되는지도 API 계약에 포함됨
- 이런 선택은 성능 논의와도 연결됨
- 인덱스 계산에는 off-by-one 함정이 있음
- 실수 여부보다 작은 문제를 어떻게 디버깅하는지 관찰할 수 있음
- 배열 길이에 따라 반환 방식이 달라짐
- 짝수 길이는 가운데 두 값의 평균을 반환함
- 홀수 길이는 가운데 값을 반환함
짧은 문제로 확장되는 대화
- 중앙값은 평균과 비교해 대부분의 경우 왜 더 나은 선택일 수 있는지 같은 통계 논의로 이어질 수 있음
- 입력과 기대값이 단순해 테스트하기 쉬우며, 후보자가 테스트 감각을 보여주기 좋음
- Python에서는 statistics 표준 라이브러리 지식을 드러낼 기회도 있음
예시 Python 구현의 선택
- 빈 리스트는 ValueError("median called with empty list")를 발생시킴
- sorted(numbers)를 사용해 numbers.sort()와 달리 입력 리스트를 직접 정렬하지 않음
- 길이는 len(numbers)로 구하고, 가운데 인덱스는 mid = length // 2로 계산함
- 짝수 길이는 (numbers[mid - 1] + numbers[mid]) / 2.0을 반환하고, 홀수 길이는 numbers[mid]를 반환함
-
Homepage
-
Tech blog
- 내가 좋아하는 소프트웨어 엔지니어링 인터뷰 질문: 중앙값 계산