Skip to content

OddOccurrencesInArray ๋ฌธ์ œ ํ•ด๊ฒฐ โ€‹

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

๋ฐฐ์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๋ฐฐ์—ด์—๋Š” ์ง์„ ์ด๋ฃจ๋Š” ์ˆซ์ž๋“ค์ด ์žˆ์œผ๋ฉฐ, ๋‹จ ํ•˜๋‚˜์˜ ์ˆซ์ž๋งŒ ์ง์ด ์—†์Šต๋‹ˆ๋‹ค.
์ด ์ง์ด ์—†๋Š” ์œ ์ผํ•œ ์ˆซ์ž๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ โ€‹

์ž…๋ ฅ (A)์ด์ง„ ํ‘œํ˜„๊ฒฐ๊ณผ (์ถœ๋ ฅ)
[9, 3, 9, 3, 9, 7, 9]9-3-9-3-9-7-9 โ†’ 7์ด ์œ ์ผํ•จ7
[1, 1, 2, 2, 3]1-1-2-2-3 โ†’ 3์ด ์œ ์ผํ•จ3
[42]42 โ†’ ์œ ์ผํ•œ ์ˆซ์ž42

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

  1. Set์„ ํ™œ์šฉํ•˜์—ฌ ์ค‘๋ณต์„ ์ œ๊ฑฐ
    • Set์€ ๊ฐ™์€ ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ์‚ญ์ œํ•˜๋Š” ํŠน์ง•์ด ์žˆ์Œ
    • ํ•œ ๋ฒˆ ๋“ฑ์žฅํ•œ ์ˆซ์ž๋Š” Set์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ๋“ฑ์žฅํ•˜๋ฉด ์‚ญ์ œ
    • ๋งˆ์ง€๋ง‰์— ๋‚จ์€ ๊ฐ’์ด ์œ ์ผํ•œ ์ˆซ์ž

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

typescript
function solution(A: number[]): number {
  const set = new Set<number>()

  for (let element of A) {
    if (set.has(element)) set.delete(element) // ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์ œ๊ฑฐ
    else set.add(element) // ์—†์œผ๋ฉด ์ถ”๊ฐ€
  }

  return +Array.from(set.values())[0] // ๋‚จ์€ ํ•˜๋‚˜์˜ ๊ฐ’ ๋ฐ˜ํ™˜
}

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

  1. Set์„ ์ด์šฉํ•˜์—ฌ ์ง์ด ๋งž๋Š” ์ˆซ์ž๋Š” ์ œ๊ฑฐ

    typescript
    const set = new Set<number>()
    • Set์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
    • ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ๋‘ ๋ฒˆ ๋“ฑ์žฅํ•˜๋ฉด ์‚ญ์ œ
  2. ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ Set์„ ์—…๋ฐ์ดํŠธ

    typescript
    for (let element of A) {
      if (set.has(element)) set.delete(element)
      else set.add(element)
    }
    • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ˆซ์ž๋Š” ์ œ๊ฑฐ
    • ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ์ˆซ์ž๋Š” ์ถ”๊ฐ€
  3. ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์š”์†Œ ๋ฐ˜ํ™˜

    typescript
    return +Array.from(set.values())[0]
    • Set์— ๋‚จ์€ ์œ ์ผํ•œ ์ˆซ์ž๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜

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

  • ๋ฐฐ์—ด ์ˆœํšŒ: O(N)
  • Set ์ถ”๊ฐ€/์‚ญ์ œ: ํ‰๊ท  O(1)
  • ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
    โ†’ ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ํšจ์œจ์ 

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

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

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

โœ… Set์„ ํ™œ์šฉํ•œ ์ง ์ œ๊ฑฐ ๋ฐฉ์‹
โœ… ํšจ์œจ์ ์ธ O(N) ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
โœ… ์œ ์ผํ•œ ์ˆซ์ž๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์Œ

์ด์ œ ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋Š” ์ˆซ์ž๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿš€