Skip to content

1. Two Sum (LeetCode) โ€‹

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ โ†’ LeetCode 1. Two Sum

๋ฌธ์ œ ์„ค๋ช… โ€‹

์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด nums์™€ ์ •์ˆ˜ target์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด ๋‚ด์—์„œ ๋‘ ์ˆ˜๋ฅผ ์„ ํƒํ•˜์—ฌ ๋”ํ–ˆ์„ ๋•Œ, ๊ทธ ํ•ฉ์ด target์ด ๋˜๋Š” ๋‘ ์ˆ˜์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ž…๋ ฅ๊ฐ’์— ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ํ•ด๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ฐ™์€ ์š”์†Œ๋ฅผ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ํ•˜๋Š” ์ธ๋ฑ์Šค๋Š” ์ˆœ์„œ์™€ ์ƒ๊ด€ ์—†์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ โ€‹

  • ์ •์ˆ˜ ๋ฐฐ์—ด nums, ๊ธธ์ด n (2 <= n <= 10โด)
  • ์ •์ˆ˜ target

์ถœ๋ ฅ โ€‹

  • ๋‘ ์ •์ˆ˜์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด

๐Ÿ’ก ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต โ€‹

  1. Brute Force (์™„์ „ ํƒ์ƒ‰) ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ์Œ์„ ๊ฒ€์‚ฌํ•˜์—ฌ target๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(nยฒ)์œผ๋กœ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  2. ํ•ด์‹œ๋งต (Hash Map) ์„ ์ด์šฉํ•˜์—ฌ, ๊ฐ ์ˆซ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ ํ˜„์žฌ ์ˆซ์ž์˜ ๋ณด์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ๋ฒ•์€ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๋ณธ ํ’€์ด์—์„œ๋Š” Hash Map์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

TypeScript ํ’€์ด ์ฝ”๋“œ โ€‹

typescript
function twoSum(nums: number[], target: number): number[] {
  const map = new Map<number, number>()

  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)
  }

  throw new Error('No solution found')
}

๐Ÿ› ๏ธ ์ฝ”๋“œ ๋™์ž‘ ์›๋ฆฌ โ€‹

  1. ๋นˆ Hash Map ์ƒ์„ฑ: ์ˆซ์ž ๊ฐ’์„ key, ์ธ๋ฑ์Šค๋ฅผ value๋กœ ์ €์žฅํ•  map์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐฐ์—ด ์ˆœํšŒ: nums ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:
    • ํ˜„์žฌ ์ˆซ์ž์˜ ๋ณด์ˆ˜(target - nums[i])๋ฅผ ๊ณ„์‚ฐ
    • ๋ณด์ˆ˜๊ฐ€ map์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
      • ์กด์žฌํ•˜๋ฉด ์ •๋‹ต ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
      • ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ์ˆซ์ž์™€ ์ธ๋ฑ์Šค๋ฅผ map์— ์ €์žฅ
  3. ๋ฐ˜๋ณต ์ข…๋ฃŒ ํ›„: ๋ฌธ์ œ ์กฐ๊ฑด์ƒ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์ •๋‹ต์ด ์กด์žฌํ•˜๋ฏ€๋กœ, ๋ฃจํ”„ ๋‚ด์—์„œ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค. (๋‹ค๋งŒ, ์•ˆ์ „์„ฑ์„ ์œ„ํ•ด ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€)

๐Ÿ“Š ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„ โ€‹

๊ตฌ๋ถ„๋ณต์žก๋„์„ค๋ช…
์‹œ๊ฐ„ ๋ณต์žก๋„O(n)๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ, ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด O(1) ์—ฐ์‚ฐ ์ˆ˜ํ–‰
๊ณต๊ฐ„ ๋ณต์žก๋„O(n)Hash Map์— ์ตœ๋Œ€ n๊ฐœ์˜ ์š”์†Œ ์ €์žฅ

๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ๋ฒ•๊ณผ ํšจ์œจ์„ฑ ๋น„๊ต โ€‹

  • Brute Force ๋ฐฉ๋ฒ•: ์ด์ค‘ for๋ฌธ์œผ๋กœ ๋ชจ๋“  ์Œ์„ ๊ฒ€์‚ฌ โ†’ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(nยฒ), ๊ณต๊ฐ„ ๋ณต์žก๋„ O(1)
  • ์ •๋ ฌ ํ›„ ํˆฌ ํฌ์ธํ„ฐ: ์ •๋ ฌ์ด ํ•„์š”ํ•˜๋‚˜, ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ ์กฐ๊ฑด ๋•Œ๋ฌธ์— ๋ถ€์ ์ ˆ (์ธ๋ฑ์Šค ์œ„์น˜ ์†์‹ค๋จ)
  • Hash Map ๋ฐฉ๋ฒ• (ํ˜„์žฌ ๋ฐฉ๋ฒ•): O(n) ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„์œผ๋กœ ๊ฐ€์žฅ ํšจ์œจ์ 

๐Ÿ“ ์š”์  ์ •๋ฆฌ โ€‹

  • Hash Map์„ ์ด์šฉํ•ด ๋ณด์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด ํ•ต์‹ฌ
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n), ๊ณต๊ฐ„ ๋ณต์žก๋„ O(n)
  • ์ •๋ ฌ ๋ฐฉ์‹์€ ์ธ๋ฑ์Šค๊ฐ€ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ ํ•ฉ
  • ๊ฐ€์žฅ ํšจ์œจ์ ์ด๊ณ  ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์€ Hash Map ํ™œ์šฉ๋ฒ•