합리적이고 효과적으로 퇴사를 준비하기 위해서는 여러 가지 기술과 지식이 요구됩니다. 특히, 자바스크립트와 같은 프로그래밍 언어에서의 숙련도는 코딩 테스트에 대비하는 데에 중요한 요소로 작용합니다. 이 포스팅에서는 자바스크립트를 이용한 알고리즘 문제를 하나 소개하고, 그 문제를 푸는 과정을 상세히 설명하겠습니다.
문제 설명
문제: 두 수의 합
정수 배열 nums
와 정수 target
이 주어질 때, nums
안의 두 수를 찾아 그 합이 target
과 일치하는 두 수를 반환하시오.
여기서 각 입력에 대해 단 하나의 정답이 존재한다고 가정하며, 동일한 요소를 두 번 사용할 수 없습니다. 반환되는 값은 두 수의 인덱스입니다.
예제 입력:
nums = [2, 7, 11, 15]
target = 9
예제 출력:
[0, 1]
이 예제는 nums[0] + nums[1] = 2 + 7 = 9
가 됨을 보여줍니다.
문제 해결 전략
이 문제를 해결하기 위해 다양한 방법을 생각해볼 수 있습니다. 대표적으로는 다음과 같은 접근 방식이 있습니다:
- 내 접근 방식: 이중 루프를 사용하여 두 수를 비교
- 해시맵을 이용한 접근: 필요할 경우 빠른 검색을 가능하게 함
1. 이중 루프를 사용한 접근
가장 직관적인 방법은 이중 루프를 사용하여 모든 두 수의 조합을 확인하는 것입니다. 각 수의 조합을 확인하여 목표 합산에 도달하는지 검증합니다. 하지만 이 방법은 시간 복잡도가 O(n2)로 성능이 떨어질 수 있습니다.
function twoSum(nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j];
}
}
}
}
// 예제 실행
const nums = [2, 7, 11, 15];
const target = 9;
console.log(twoSum(nums, target)); // [0, 1]
2. 해시맵을 이용한 접근
더 효율적인 방법은 해시맵을 사용하는 것입니다. 수를 순회하면서 각 수의 값을 키로, 그 인덱스를 값으로 저장합니다. 그런 다음 각 값을 통해 필요한 차이를 계산하고, 이 차이를 해시맵에서 검색함으로써 선형 시간 복잡도 O(n)으로 문제를 해결할 수 있습니다.
function twoSum(nums, target) {
const numMap = new Map();
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (numMap.has(complement)) {
return [numMap.get(complement), i];
}
numMap.set(nums[i], i);
}
}
// 예제 실행
const nums = [2, 7, 11, 15];
const target = 9;
console.log(twoSum(nums, target)); // [0, 1]
실행 시간 복잡도
첫 번째 방법은 O(n2)이고, 두 번째 방법은 O(n)입니다. 따라서 두 번째 방법이 훨씬 효율적입니다. 두 번째 방법은 공간 복잡도가 O(n)으로 추가적인 해시맵을 사용합니다.
결론
이 문제를 통해 자바스크립트에서의 코딩 능력을 향상시키고, 다양한 접근 방식을 시도해볼 수 있었습니다. 특히 해시맵을 활용한 문제 해결 방법은 코딩 테스트에서 매우 유용하게 활용될 수 있습니다.
퇴사를 준비하며, 코딩 테스트에 대한 대비가 필요할 것입니다. 반복적인 연습을 통해 알고리즘 문제 해결 능력을 기르고, 실제 코딩 테스트에서의 응용력을 높이기를 바랍니다. 다음 포스트에서는 더 복잡한 문제들을 다룰 예정이니 기대해 주세요!