Skip to content

๐Ÿงฉ PermMissingElem ๋ฌธ์ œ ํ•ด๊ฒฐ โ€‹

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

๊ธธ์ด๊ฐ€ N์ธ ๋ฐฐ์—ด A์—๋Š” 1๋ถ€ํ„ฐ N+1๊นŒ์ง€์˜ ์ •์ˆ˜ ์ค‘ ํ•˜๋‚˜์˜ ์ˆซ์ž๋งŒ ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ˆ„๋ฝ๋œ ์ˆซ์ž๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.


๋ฌธ์ œ ์กฐ๊ฑด โ€‹

  • ๋ฐฐ์—ด A์˜ ํฌ๊ธฐ๋Š” N (์ฆ‰, N๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋จ)
  • ๋ฐฐ์—ด์—๋Š” 1๋ถ€ํ„ฐ N+1๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜์”ฉ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ, ๋‹จ ํ•˜๋‚˜์˜ ์ˆซ์ž๊ฐ€ ๋ˆ„๋ฝ๋จ
  • ๋ˆ„๋ฝ๋œ ์ˆซ์ž๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ

์˜ˆ์ œ โ€‹

์ž…๋ ฅ (A)๊ธฐ๋Œ€ ์ถœ๋ ฅ (๊ฒฐ๊ณผ)
[2, 3, 1, 5]4
[1]2
[]1
[2, 3, 4, 5]1
[1, 2, 3, 4]5

์˜ˆ์ œ ์„ค๋ช… (์ฒซ ๋ฒˆ์งธ ์ผ€์ด์Šค) โ€‹

  • ์›๋ž˜ ์žˆ์–ด์•ผ ํ•  ์ˆซ์ž: [1, 2, 3, 4, 5]
  • ์‹ค์ œ ๋ฐฐ์—ด: [2, 3, 1, 5]
  • ๋ˆ„๋ฝ๋œ ์ˆซ์ž: 4

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• โ€‹

  1. 1๋ถ€ํ„ฐ N+1๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•จ

    • ์›๋ž˜ ๋ฐฐ์—ด์— ์žˆ์–ด์•ผ ํ•  ๋ชจ๋“  ์ˆซ์ž์˜ ํ•ฉ์„ ๊ณ„์‚ฐ (totalSum)
    • ๊ณต์‹:
      [ \text{totalSum} = \frac{(N+1) \times (N+2)}{2} ]
  2. ํ˜„์žฌ ๋ฐฐ์—ด์˜ ํ•ฉ(actualSum)์„ ๊ตฌํ•จ

    • ๋ฐฐ์—ด A ๋‚ด ๋ชจ๋“  ์ˆซ์ž์˜ ํ•ฉ ๊ณ„์‚ฐ
  3. ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜ (totalSum - actualSum)

    • ๋ˆ„๋ฝ๋œ ์ˆซ์ž๋Š” totalSum - actualSum๊ณผ ๊ฐ™์Œ

์ฝ”๋“œ ๊ตฌํ˜„ โ€‹

typescript
function solution(A: number[]): number {
  const N = A.length + 1 // ์›๋ž˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ๋ฐฐ์—ด ํฌ๊ธฐ
  const totalSum = (N * (N + 1)) / 2 // 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ํ•ฉ
  const actualSum = A.reduce((sum, num) => sum + num, 0) // ๋ฐฐ์—ด ๋‚ด ์ˆซ์ž์˜ ํ•ฉ

  return totalSum - actualSum // ๋ˆ„๋ฝ๋œ ์ˆซ์ž ๋ฐ˜ํ™˜
}

์ฝ”๋“œ ์„ค๋ช… โ€‹

  1. N+1 ํฌ๊ธฐ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ๊ฐ€์ •ํ•˜๊ณ  ํ•ฉ์„ ๊ณ„์‚ฐ

    typescript
    const N = A.length + 1
    const totalSum = (N * (N + 1)) / 2
    • 1๋ถ€ํ„ฐ N+1๊นŒ์ง€์˜ ํ•ฉ์„ ๊ณต์‹์œผ๋กœ ๊ณ„์‚ฐ
  2. ํ˜„์žฌ ๋ฐฐ์—ด์˜ ํ•ฉ(actualSum)์„ ๊ตฌํ•จ

    typescript
    const actualSum = A.reduce((sum, num) => sum + num, 0)
    • ๋ฐฐ์—ด์— ๋“ค์–ด ์žˆ๋Š” ์ˆซ์ž๋“ค์˜ ํ•ฉ์„ ๊ณ„์‚ฐ
  3. ๋ˆ„๋ฝ๋œ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜

    typescript
    return totalSum - actualSum
    • ์ „์ฒด ํ•ฉ์—์„œ ํ˜„์žฌ ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๋นผ๋ฉด ๋ˆ„๋ฝ๋œ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ด

์‹œ๊ฐ„ ๋ณต์žก๋„ โ€‹

  • O(N) (๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒ)
  • ๊ธฐ์กด sort()๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ O(N log N) โ†’ ๋” ๋น„ํšจ์œจ์ 
  • ์ด ๋ฐฉ๋ฒ•์€ **O(N)**์œผ๋กœ ์ตœ์ ํ™”๋˜์–ด ๋น ๋ฆ„

์‹คํ–‰ ์˜ˆ์ œ โ€‹

typescript
console.log(solution([2, 3, 1, 5])) // ์ถœ๋ ฅ: 4
console.log(solution([1])) // ์ถœ๋ ฅ: 2
console.log(solution([])) // ์ถœ๋ ฅ: 1
console.log(solution([2, 3, 4, 5])) // ์ถœ๋ ฅ: 1
console.log(solution([1, 2, 3, 4])) // ์ถœ๋ ฅ: 5

์ตœ์ข… ์ •๋ฆฌ โ€‹

โœ… O(N)์˜ ๋น ๋ฅธ ์—ฐ์‚ฐ
โœ… ์ •๋ ฌ ์—†์ด ๊ณต์‹(N(N+1)/2) ํ™œ์šฉ
โœ… ๋ˆ„๋ฝ๋œ ์ˆซ์ž๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์Œ

์ด์ œ ๋ˆ„๋ฝ๋œ ์ˆซ์ž๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿš€