Logo
Hyunsu Blog
algorithm-set

๐Ÿ“†Published :Dec 30, 2023 โ€ข

๐Ÿ“†Updated :Dec 30, 2023 โ€ข

โ˜•๏ธ3min

์ง‘ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Union&Find

  • ์ด ๊ธ€์€ ๊ณจ๋“ ๋ž˜๋น— ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ ํŒŒ์ด์ฌ ํŽธ์˜ 10์žฅ ์จ๋จธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋… ์ •๋ฆฌ

์ง‘ํ•ฉ์˜ ๊ฐœ๋…

  • ์ˆœ์„œ์™€ ์ค‘๋ณต์ด ์—†๋Š” ์›์†Œ๋“ค์„ ๊ฐ–๋Š” ์ž๋ฃŒ๊ตฌ์กฐ. ex {1,6,6,6,4,3} -> {1,6,4,3} ์œผ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.
  • ์ƒํ˜ธ๋ฐฐํƒ€์ ์ง‘ํ•ฉ ์€ ๊ต์ง‘ํ•ฉ์ด ์—†๋Š” ์ง‘ํ•ฉ ๊ด€๊ณ„
  • A = {1,2,3}, B= {4,5,6,7} ๊ต์ง‘ํ•ฉ์ด ์—†๋Š” ๊ด€๊ณ„๋กœ ์ƒํ˜ธ๋ฐฐํƒ€์  ์ง‘ํ•ฉ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒํ˜ธ ๋ฐฐํƒ€์  ์ง‘ํ•ฉ์€ ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์‚ฌ์ดํด์„ ํ™•์ธํ•˜๋Š” ์ž‘์—…์— ๋งŽ์ด ํ™œ์šฉ
  • ๊ทธ ์™ธ ์ด๋ฏธ์ง€ ๋ถ„ํ• , ๋„๋กœ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„, ๊ฒŒ์ž„ ๊ฐœ๋ฐœ, ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ž‘์—… ๋“ฑ ์—์„œ ํ™œ์šฉ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ง‘ํ•ฉ ํ‘œํ˜„

  • ์ง‘ํ•ฉ์€ ๋ฐฐ์—ด์„ ํ™œ์šฉํ•œ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„.
  • ์ฆ‰, ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ์ƒํ˜ธ ๋ฐฐํƒ€์  ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š” ์ง‘ํ•ฉ์„ ๋ชจ๋‘ ํ‘œํ˜„ํ•œ๋‹ค.
  • disjoint_set[2] = 1 ์˜ ์˜๋ฏธ๋Š” ๋…ธ๋“œ 2์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋Š” 1์ด๋‹ค.
  • disjoint_set[1]=1 ์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ๋…ธ๋“œ์ธ 1์€ ์ง‘ํ•ฉ์˜ ๋Œ€ํ‘œ ์ด๋ฏ€๋กœ(=๋Œ€ํ‘œ ๋…ธ๋“œ), ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ ๊ณง ์ž๊ธฐ์ž์‹ ์ด ๋œ๋‹ค. set

์œ ๋‹ˆ์˜จ-ํŒŒ์ธ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์ง‘ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ฃผ๋กœ ์“ฐ์ด๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • ์œ ๋‹ˆ์˜จ-ํŒŒ์ธ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์—ฐ์‚ฐ์˜ ์ˆœ์„œ๋Š” ์ฃผ๋กœ ํŒŒ์ธ๋“œ๊ฐ€ ๋จผ์ €๊ณ  ์œ ๋‹ˆ์˜จ์ด ๋‚˜์ค‘์— ์—ฐ์‚ฐ๋œ๋‹ค.

ํŒŒ์ธ๋“œ ์—ฐ์‚ฐ

  • ํŒŒ์ธ๋“œ ์—ฐ์‚ฐ์€ ํ˜„์žฌ๋…ธ๋“œ์—์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ๋งˆ์ง€๋ง‰ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • ํƒ์ƒ‰ ์—ฐ์‚ฐ์„ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ•˜๊ฒŒ๋˜๋ฉด ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ๋…ธ๋“œ์™€ ๊ฐ™์„ ๋•Œ๊นŒ์ง€ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๋…ธ๋“œ 7 ์˜ ๋ฃจํŠธ๋…ธํŠธ๋Š” 1 ์ด๋‹ค.
  • ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N)
  • ๊ฒฝ๋กœ์••์ถ• ์„ ํ†ตํ•ด ์—ฐ์‚ฐ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์œ ๋‹ˆ์˜จ ์—ฐ์‚ฐ

  • ๋‘ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ์—ฐ์‚ฐ.
  • ์ฆ‰, ๋‘์ง‘ํ•ฉ์˜ ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ๊ฐ™๊ฒŒ ํ•˜๋Š” ์—ฐ์‚ฐ.
  • ๋‘ ์ง‘ํ•ฉ์—์„œ ๊ฐ๊ฐ ํŒŒ์ธ๋“œ ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜์—ฌ ๋ฃจํŠธ๋…ธํŠธ๋ฅผ ์ฐพ์•„ ๋‚ด์–ด ํ•œ ์ชฝ์˜ ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ๋‹ค๋ฅธ ์ง‘ํ•ฉ ๋ฃจํŠธ ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•œ๋‹ค.
  • ๋‘ ์ง‘ํ•ฉ ์ค‘ ์–ด๋–ค ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ํ•ด๋„ ์ƒ๊ด€ ์—†๋‹ค.
set1
  • ์œ„์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์€ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๊ฐ€ ๊นŠ์–ด์งˆ ์ˆ˜๋ก ์—ฐ์‚ฐ ๋น„์šฉ์ด ์ปค์ง€๋Š” ๋‹จ์ 
  • ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋žญํฌ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ๋‹ˆ์˜จ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.
  • ๋žญํฌ ๊ธฐ๋ฐ˜ ์œ ๋‹ˆ์˜จ ์—ฐ์‚ฐ์€ ๊ฐ ์ง‘ํ•ฉ์˜ ํŠธ๋ฆฌ๊นŠ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ž‘์€ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋ฅผ ๊ฐ€์ง„ ๋ฃจํŠธ๊ฐ€ ํฐ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋ฅผ ๊ฐ€์ง„ ์ง‘ํ•ฉ์— ํ•ฉ์ณ์ง„๋‹ค.
  • ์ฆ‰ ๋žญํฌ ๊ธฐ๋ฐ˜์˜ ์œ ๋‹ˆ์˜จ ์—ฐ์‚ฐ์€ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๋ฌธ์ œํ’€๊ธฐ

1.ํฐ์ผ“๋ชฌ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํฐ์ผ“๋ชฌ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ด ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ํฐ์ผ“๋ชฌ ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด n/2๋ณด๋‹ค ์ž‘์œผ๋ฉด ํฐ์ผ“๋ชฌ ์ข…๋ฅ˜ ๊ฐœ์ˆ˜๋ฅผ, ํฌ๋‹ค๋ฉด ์ตœ๋Œ€ ํฐ์ผ“๋ชฌ ์ข…๋ฅ˜๋ฅผ ์„ ํƒํ•˜๋Š” n/2๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ฃผ์–ด์ง„ ํฐ์ผ“๋ชฌ์˜ ๊ธธ์ด๊ฐ€ 10,000 ์ดํ•˜์ด๋‹ˆ O(n) ์ด๋ฉด ์ถฉ๋ถ„ ํ•˜๋‹ค. ํฐ์ผ“๋ชฌ ์ข…๋ฅ˜๋Š” ํ•ด์‹œํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ {ํฐ์ผ“๋ชฌ ์ข…: ๊ฐœ์ˆ˜ } ๋กœ ์ €์žฅํ•œ๋‹ค.

function solution(nums) { const hashTable = {} for (const num of nums) { hashTable[num] = (hashTable[num] || 0) + 1 } const pocketmonSpeicesNum = Object.keys(hashTable).length return pocketmonSpeicesNum > nums.length / 2 ? nums.length / 2 : pocketmonSpeicesNum }

2. ์˜์–ด ๋๋ง์ž‡๊ธฐ

์˜์–ด ๋๋ง์ž‡๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ด ๋ฌธ์ œ๋Š” ๋๋ง์ž‡๊ธฐ์˜ ๊ทœ์น™์„ ์ž˜ ์ ์šฉํ•˜์—ฌ ๊ทœ์น™์„ ์–ด๊ธด ๊ฒฝ์šฐ ์‹œ์ ์˜ ํƒˆ๋ฝํ•˜๋Š” ์‚ฌ๋žŒ ๋ฒˆํ˜ธ์™€ ํƒˆ๋ฝํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ช‡ ๋ฒˆ์งธ ์‚ฌ์ดํด์ธ์ง€๋ฅผ ์ž˜ ํŠธ๋ž˜ํ‚น ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.

๊ทœ์น™์ค‘ ์ด์ „์— ๋“ฑ์žฅํ–ˆ๋˜ ๋‹จ์–ด๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ ๊ฒฝ์šฐ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ set์„ ์‚ฌ์šฉํ•˜์—ฌ set์˜ size ์™€ ํ˜„์žฌ ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹ค๋ฅด๋ฉด ์ค‘๋ณต๋œ ๋‹จ์–ด๋ผ๊ณ  ๊ฐ„์ฃผํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

function solution(n, words) { const wordSet = new Set() let answer = [0, 0] words.every((word, i) => { let isRuleBroken = false wordSet.add(word) if (wordSet.size !== i + 1) isRuleBroken = true if (word.length <= 1) isRuleBroken = true let prev = words[i - 1] if (prev && prev[prev.length - 1] !== word[0]) isRuleBroken = true if (isRuleBroken) { let number = (i + 1) % n === 0 ? n : (i + 1) % n let nth = Math.ceil((i + 1) / n) answer = [number, nth] return false } return true }) return answer }

3. ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ”๋กœ ๊ฐ€๊ธฐ

์ฃผ์–ด์ง„ ์ „ํ™”๋ฒˆํ˜ธ ๋ฆฌ์ŠคํŠธ ๋‚ด์—์„œ ํ•˜๋‚˜์˜ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด๊ฐ€ ๋˜๋ฉด false ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ „ํ™”๋ฒˆํ˜ธ ๋ฆฌ์ŠคํŠธ๊ฐ€ 1,000,000 ์ด๋ผ๋Š” ์ ์—์„œ ํšจ์œจ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ ์ด ์ค‘์š”ํ•˜๋‹ค. brute force ๋ฐฉ์‹์œผ๋กœ ๊ฐ๊ฐ ์ „ํ™”๋ฒˆํ˜ธ ํ•˜๋‚˜์— ๋‚˜๋จธ์ง€ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N^2)์ด ๋˜๋ฏ€๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ƒ๊ฐํ•œ ์ ‘๊ทผ๋ฒ•์€ ๊ธธ์ด๊ฐ€ ์งง์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ ํ›„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ™์€ ๋ฒˆํ˜ธ ํ˜น์€ ํ•˜๋‚˜์˜ ์ „ํ™”๋ฒˆํ˜ธ์˜ ๋ถ€๋ถ„ ๋ฒˆํ˜ธ๊ฐ€ set์— ์—†์œผ๋ฉด set์— ์ถ”๊ฐ€ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ทธ๋ž˜์„œ set ๋‚ด์— ์žˆ๋‹ค๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ฉด์—์„  ์ตœ์•…์˜ ๊ฒฝ์šฐ 2์ฒœ๋งŒ ์œผ๋กœ ํ†ต๊ณผ๋Š” ํ–ˆ์ง€๋งŒ ๋ณต์žก๋„๋ฅผ ๋” ๊ฐœ์„ ํ•  ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค.
์ „ํ™”๋ฒˆํ˜ธ ๋ฆฌ์ŠคํŠธ ๊ธธ์ด 1,000,000 * ํ•˜๋‚˜์˜ ์ „ํ™”๋ฒˆํ˜ธ ๊ธธ์ด 20 = 20,000,000

function solution(phone_book) { const set = new Set() // ๊ธธ์ด๊ฐ€ ์งง์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ- ์ ‘๋‘์–ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋ฅผ set์—์„œ ์ฐพ๊ธฐ ์œ„ํ•ด phone_book.sort((a, b) => a.length - b.length) for (const phoneNum of phone_book) { if (set.has(phoneNum)) return false //๊ฐ™์€ ๋ฒˆํ˜ธ ์žˆ์œผ๋ฉด false let prefix = '' for (let i = 0; i < phoneNum.length; i++) { prefix += phoneNum[i] if (set.has(prefix)) return false } set.add(phoneNum) } return true }

์„ฑ๋Šฅ ์ตœ์ ํ™”

  • some ๋‚ด์žฅ ํ•จ์ˆ˜ ์‚ฌ์šฉ: ๋ฐฐ์—ด์˜ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ true์ด๋ฉด ๋ฉˆ์ถ”๊ณ  true๋ฅผ ๋ฐ˜ํ™˜
  • startsWith ๋‚ด์žฅ ํ•จ์ˆ˜ ์‚ฌ์šฉ : ๋ฌธ์ž์—ด์ด ํŠน์ • ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ
  • ์ •๋ ฌ ํ›„, ๋‹ค์Œ ์š”์†Œ๊ฐ€ ํ˜„์žฌ ์š”์†Œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ง€ ํ™•์ธ, ์‹œ์ž‘ํ•˜๋ฉด true ๋ฐ˜ํ™˜ ํ›„ ์ˆœํšŒ๋ฅผ ๋ฉˆ์ถ˜๋‹ค.
  • ๋ฌธ์ œ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ๋Š” false๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ! ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์š”์†Œ๊นŒ์ง€ ์ˆœํšŒ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์€, ์ด์ „ ์š”์†Œ์™€ ์ ‘๋‘์–ด ์กฐ๊ฑด์— ์ถฉ์กฑํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ, ๋”์ด์ƒ์˜ ์ˆœํšŒ๋Š” ํ•„์š”์—†์Œ.
  • ๋”ฐ๋ผ์„œ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ˆœํšŒํ–ˆ์„ ๋•Œ๋Š” false๋ฅผ ๋ฐ˜ํ™˜.
  • O(nlogn)
function solution1(phone_book) { return !phone_book.sort().some((t, i) => { if (i === phone_book.length - 1) return false //๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋Š” false๋ฅผ ๋‘์–ด ๋ฌด์กฐ๊ฑด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋„๋ก return phone_book[i + 1].startsWith(phone_book[i]) }) }

4. ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

์ด ๋ฌธ์ œ๋Š” MST๋ฅผ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•œ ๋ฌธ์ œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ชจ๋ฅธ ์ƒํƒœ๋กœ ์ƒ๊ฐํ•œ ์ ‘๊ทผ๋ฒ•์€

  • ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ๊ฐ„์˜ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค์Œ,

  • min( find(0)+find(1), find(0)+find(2)) ์„ ํ†ตํ•ด ๋งค ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์˜ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ–ˆ์ง€๋งŒ ๊ณ„์† ์‹คํŒจํ•˜๋ฉฐ ์‰ฝ์ง„ ์•Š์•˜๋‹ค.

  • ์ตœ์†Œ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, ์ ‘๊ทผ์ž์ฒด๊ฐ€ ๋‹ฌ๋ž๋‹ค.

  • ๋‚ด ์ ‘๊ทผ์˜ ๋ฌธ์ œ์ ์€

    1. ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์•„ ๋ชจ๋“  ๋…ธ๋“œ์˜ find๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ฑฐ์น˜๋Š” ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์‚ฌ์ดํดํ•ธ๋“ค๋ง์ด ์–ด๋ ค์› ์Œ. - ์ด ๋ถ€๋ถ„์€ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋กœ ์ ‘๊ทผ.
    1. ๋ชจ๋“  ์—ฃ์ง€๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ์–ด๋Š ์‹œ์ ์— ์•Œ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์˜๋ฌธ์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์–‘๋ฐฉํ–ฅ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์—์ง€ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ–ˆ์—ˆ๊ณ  (์‚ฌ์ดํด ํ•ธ๋“ค๋ง์ด ์‰ฌ์›Œ์ง), ๋ชจ๋“  ์—ฃ์ง€๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์€ ํŠธ๋ฆฌ์™€ ๊ทธ๋ž˜ํ”„์˜ ์ฐจ์ด์ธ ๊ทธ๋ž˜ํ”„ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋Š” ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ณด๋‹ค -1 ๊ฐœ์ธ์ ์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ.

โŒ ์‹œ๋„ํ•œ ์ ‘๊ทผ๋ฒ•

โœ… ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ˜์˜ ํ•œ ์†Œ์Šค์ฝ”๋“œ

function solution(n, costs) { var answer = 0 const disjoint = Array.from({ length: n }, (_, i) => i) let edgeNum = 0 //๊ฐ€์ค‘์น˜ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ (pop()ํ•˜๊ธฐ ์œ„ํ•ด ) costs.sort((a, b) => b[2] - a[2]) while (edgeNum < n - 1) { if (!costs.length) break const [a, b, cost] = costs.pop() // ์ง‘ํ•ฉ์˜ ๋Œ€ํ‘œ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์‚ฌ์ดํด์ธ์ง€ ํ™•์ธ const rootA = find(a, disjoint) const rootB = find(b, disjoint) //์‚ฌ์ดํด์ด ์•„๋‹ˆ๋ผ๋ฉด union if (rootA !== rootB) { union(rootA, rootB, disjoint) edgeNum += 1 answer += cost } // ์‚ฌ์ดํด์ด๋ผ๋ฉด continue } return answer } function find(target, disjoint) { if (disjoint[target] === target) return target return (disjoint[target] = find(disjoint[target], disjoint)) } function union(a, b, disjoint) { disjoint[a] = b return }

Hi, I'm Hyunsu ๐Ÿ‘‹

Profile Image

์•ˆ๋…•ํ•˜์„ธ์š”. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ฃผํ˜„์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํ’๋ถ€ํ•˜๊ณ  ๊ฐ€์น˜ ์žˆ๋Š” ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ์ผ์— ๋ฟŒ๋“ฏํ•จ์„ ๋Š๋‚๋‹ˆ๋‹ค.

์˜ต์‹œ๋””์–ธ(Obsidian)์—์„œ ํ˜„์žฌ ๋ธ”๋กœ๊ทธ๋กœ ํ•˜๋‚˜์”ฉ ๊ธ€์„ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์— ์žˆ์–ด์š”. โ˜•๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป โ›ท

Github on ViewReach Me Out