자바스크립트는 웹 개발에 있어 가장 중요한 언어 중 하나이며, 알고리즘 문제 풀이에서 그 중요성은 더욱 부각됩니다. 많은 기업들이 코딩 테스트를 통해 지원자의 문제 해결 능력과 코딩 능력을 평가합니다. 이번 글에서는 자바스크립트로 해결할 수 있는 알고리즘 문제를 통해 코딩 테스트의 전반적인 접근 방식과 문제 해결 과정을 자세히 설명하겠습니다.
문제 설명
문제 1: 두 수의 합
정수 배열 nums
와 정수 target
가 주어졌을 때, 배열에 있는 두 수의 합이 target
과 일치하는 인덱스의 배열을 반환하는 함수를 작성하시오.
예를 들면:
nums = [2, 7, 11, 15]
,target = 9
이라면,[0, 1]
을 반환해야 합니다. (2 + 7 = 9)
문제 접근 방법
이 문제를 해결하기 위해 다음과 같은 접근 방식을 취할 수 있습니다.
- 이중 반복문 사용: 배열의 두 요소를 반복하여 합계를 계산하는 방법. 하지만 시간 복잡도가 O(n2)로 비효율적입니다.
- 해시맵 사용: 한 번의 반복으로 문제를 해결할 수 있습니다. 필요한 수를 해시맵에 저장하여, 현재 수와
target
의 차이를 해시맵에서 찾아보는 방법입니다. 이 방법의 시간 복잡도는 O(n)입니다.
해결 방안: 해시맵을 이용한 코드
function twoSum(nums, target) {
const map = new Map(); // 해시맵을 초기화
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i]; // 필요한 값을 계산
if (map.has(complement)) {
return [map.get(complement), i]; // 인덱스를 반환
}
map.set(nums[i], i); // 현재 수를 해시맵에 추가
}
return []; // 결과가 없으면 빈 배열 반환
}
코드 설명
위의 코드는 twoSum
함수를 정의합니다. 함수는 두 개의 매개변수, 즉 정수 배열 nums
와 정수 target
을 받습니다.
- 해시맵(map)을 초기화합니다.
- 주어진 배열
nums
를 반복합니다. - 각 수마다
complement
을 계산합니다. (목표 값에서 현재 값을 뺀 결과) - 해시맵에
complement
이 있는지 확인합니다. 있으면 현재 인덱스와 저장된 인덱스를 반환합니다. - 현재 수를 해시맵에 추가합니다.
복습
해시맵을 사용하여 문제를 해결한 방법은 효율적이었습니다. 그 이유는 코드가 O(n) 복잡도로 작동해 모든 입력 케이스에 대해 신속하게 반응할 수 있기 때문입니다. 코딩 테스트를 준비하면서 다양한 문제를 풀고 해결 방법을 이해하면 알고리즘과 자료구조에 대한 깊은 이해를 얻을 수 있습니다.
결론
자바스크립트 코딩 테스트에서의 성공은 문제를 읽고 이해하는 능력, 그리고 그에 적합한 알고리즘을 선택하는 능력에 달려 있습니다. 오늘 다룬 두 수의 합 문제는 그리 복잡하지 않지만, 알고리즘적 사고를 기르는 데 좋은 연습이 됩니다. 앞으로 더 많은 문제를 풀어보며 실력을 향상시켜 보세요!