1. Two Sum
문제 설명
숫자 nums 배열과 타겟 숫자가 주어질 때, 배열의 두 숫자를 합하여 타겟이 되는 인덱스를 반환하라.
각각의 입력에는 하나의 솔루션만 있고, 같은 요소를 두 번 사용할 수 없다.
정답을 반환 할 때, 정렬은 필요없다.
해결 방법
반복문을 돌며 타겟에서 현재 값을 빼면 나머지 값이 나오기 때문에 이를 배열에서 찾지말고, object에 저장해서 한 번에 찾도록 한다.
object에 저장할 때에는 [ 현재 값: index ]로 저장하도록 한다.
풀이 코드
1
2
3
4
5
6
7
8
export function twoSum(nums: number[], target: number): number[] {
const numsObj = {};
for (let i = 0; i < nums.length; i++) {
if (numsObj[target - nums[i]] >= 0) return [numsObj[target - nums[i]], i];
numsObj[nums[i]] = i;
}
}
테스트 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { describe, expect, test } from '@jest/globals';
import { twoSum } from '.';
describe('two sum test describe', () => {
test('test case 1', () => {
expect(twoSum([2, 7, 11, 15], 9)).toEqual(expect.arrayContaining([0, 1]));
});
test('test case 2', () => {
expect(twoSum([3, 2, 4], 6)).toEqual(expect.arrayContaining([1, 2]));
});
test('test case 3', () => {
expect(twoSum([3, 3], 6)).toEqual(expect.arrayContaining([0, 1]));
});
});