소개
프로그래밍 언어의 기본적인 이해를 바탕으로 알고리즘 문제를 해결하는 것은 코딩테스트에서 중요한 요소입니다. 특히 자바스크립트는 웹 개발 및 frontend 분야에서 필수적으로 사용되는 언어로, 많은 기업들이 자바스크립트를 활용한 문제를 출제하고 있습니다. 이번 강좌에서는 ‘좋은 수’라는 문제를 통해 자바스크립트의 활용성을 배우고, 알고리즘 문제 해결 과정을 자세히 설명하겠습니다.
문제 설명
‘좋은 수’ 문제는 주어진 수들 가운데 특정 조건을 만족하는 수를 찾는 문제입니다. 이 문제의 구체적인 내용은 다음과 같습니다:
문제: 양의 정수 배열이 주어질 때, 배열에서 중복을 제거하고, 10보다 작은 수를 모두 출력하는 함수를 작성하세요. 또한 남은 수들의 평균을 소수점 첫째 자리까지 구하여 반환하세요.
입력 및 출력 형식
입력: 양의 정수로 이루어진 배열 arr ([1, 2, 2, 3, 10, 5, 7, 15])
출력:
1. 중복을 제거한 수 중 10보다 작은 수의 리스트
2. 남은 수들의 평균 (소수점 첫째 자리까지)
예시
입력: [1, 2, 2, 3, 10, 5, 7, 15] 출력: 중복을 제거한 수 (10보다 작은 수): [1, 2, 3, 5, 7] 평균: 3.6
문제 해결 접근 방법
문제를 해결하기 위해서는 배열의 중복을 제거하고, 필터링된 배열의 평균을 계산하는 단계를 따라야 합니다. 자바스크립트를 사용하여 이러한 작업을 수행하는 방법을 단계별로 살펴보겠습니다.
1단계: 중복 제거
배열에서 중복된 요소를 제거하기 위해 Set 객체를 사용할 수 있습니다. Set 객체는 자동으로 중복을 허용하지 않으므로, 이 객체를 이용하여 원하는 결과를 쉽게 얻을 수 있습니다.
const arr = [1, 2, 2, 3, 10, 5, 7, 15];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 10, 5, 7, 15]
2단계: 필터링
이제 중복이 제거된 배열에서 10보다 작은 수를 필터링하는 작업을 수행하겠습니다. JavaScript의 filter() 메소드를 활용하여 조건에 맞는 요소만을 추출할 수 있습니다.
const filteredArr = uniqueArr.filter(num => num < 10);
console.log(filteredArr); // [1, 2, 3, 5, 7]
3단계: 평균 계산
필터링된 배열의 평균을 계산하기 위해서는 reduce() 메소드를 사용할 수 있습니다. 배열의 모든 요소를 더한 후, 그 총합을 요소의 개수로 나눈 값을 구하면 평균을 얻을 수 있습니다.
const average = filteredArr.reduce((acc, num) => acc + num, 0) / filteredArr.length;
console.log(average.toFixed(1)); // 3.6
전체 코드
지금까지 설명한 모든 과정을 하나의 함수로 통합하여 최종 코드를 작성하겠습니다.
function goodNumbers(arr) {
const uniqueArr = [...new Set(arr)];
const filteredArr = uniqueArr.filter(num => num < 10);
const average = filteredArr.reduce((acc, num) => acc + num, 0) / filteredArr.length;
return {
filteredNumbers: filteredArr,
average: average.toFixed(1)
};
}
const inputArr = [1, 2, 2, 3, 10, 5, 7, 15];
const result = goodNumbers(inputArr);
console.log(result);
결과
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
{
filteredNumbers: [1, 2, 3, 5, 7],
average: "3.6"
}
최적화 및 고려할 점
위의 문제 해결 방법은 업무에 적합하게 잘 작동합니다. 하지만 대규모 데이터세트를 다루는 경우 성능에 대한 추가 고려가 필요할 수 있습니다. 예를 들어, Set을 사용하는 방법은 고유한 값을 쉽게 추출할 수 있지만, 배열의 크기가 매우 클 경우 메모리 사용량이 증가할 수 있습니다. 이러한 경우 알고리즘의 성능을 개선하기 위해 몇 가지 방법을 고려할 수 있습니다:
- 중복 제거와 필터링을 동시에 수행하는 방법을 탐색하기.
- 데이터 구조 선택에 따라 성능을 개선하기.
마무리
이번 강좌에서는 자바스크립트를 활용하여 ‘좋은 수’라는 문제를 해결하는 과정을 살펴보았습니다. 중복을 제거하고, 조건에 맞는 수를 필터링하며, 평균을 계산하는 일련의 단계를 통해 기본적인 알고리즘 문제 해결 능력을 향상시킬 수 있었습니다. 코딩테스트를 준비하는 과정에서 이러한 문제를 많이 풀어보며 연습하는 것이 중요합니다. 자바스크립트의 다양한 기능을 활용해 보며 더욱 깊이 있는 이해를 가져가시길 바랍니다.
도움이 되었나요?
이 강좌가 자바스크립트 코딩테스트를 준비하는 데 도움이 되었다면, 다른 알고리즘 문제도 도전해 보세요. 그 과정에서 발생하는 어려움이나 궁금한 점은 언제든지 댓글로 남겨주세요. 본인의 학습 여정을 공유하며 함께 성장할 수 있는 기회를 가지길 바랍니다.