Two Sum
포스트
취소

Two Sum

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]));
  });
});
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.