๐Ÿฅ‡[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ˆœ์œ„

Chobbyยท2022๋…„ 3์›” 22์ผ
0

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
22/345

๋ฌธ์ œ ์„ค๋ช…

n๋ช…์˜ ๊ถŒํˆฌ์„ ์ˆ˜๊ฐ€ ๊ถŒํˆฌ ๋Œ€ํšŒ์— ์ฐธ์—ฌํ–ˆ๊ณ  ๊ฐ๊ฐ 1๋ฒˆ๋ถ€ํ„ฐ n๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๊ถŒํˆฌ ๊ฒฝ๊ธฐ๋Š” 1๋Œ€1 ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๊ณ , ๋งŒ์•ฝ A ์„ ์ˆ˜๊ฐ€ B ์„ ์ˆ˜๋ณด๋‹ค ์‹ค๋ ฅ์ด ์ข‹๋‹ค๋ฉด A ์„ ์ˆ˜๋Š” B ์„ ์ˆ˜๋ฅผ ํ•ญ์ƒ ์ด๊น๋‹ˆ๋‹ค. ์‹ฌํŒ์€ ์ฃผ์–ด์ง„ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์„ ์ˆ˜๋“ค์˜ ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ช‡๋ช‡ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์‹คํ•˜์—ฌ ์ •ํ™•ํ•˜๊ฒŒ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์„ ์ˆ˜์˜ ์ˆ˜ n, ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ 2์ฐจ์› ๋ฐฐ์—ด results๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์ •ํ™•ํ•˜๊ฒŒ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์žˆ๋Š” ์„ ์ˆ˜์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ์„ ์ˆ˜์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ 100๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋Š” 1๊ฐœ ์ด์ƒ 4,500๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • results ๋ฐฐ์—ด ๊ฐ ํ–‰ [A, B]๋Š” A ์„ ์ˆ˜๊ฐ€ B ์„ ์ˆ˜๋ฅผ ์ด๊ฒผ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ์—๋Š” ๋ชจ์ˆœ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

2๋ฒˆ ์„ ์ˆ˜๋Š” [1, 3, 4] ์„ ์ˆ˜์—๊ฒŒ ํŒจ๋ฐฐํ–ˆ๊ณ  5๋ฒˆ ์„ ์ˆ˜์—๊ฒŒ ์Šน๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 4์œ„์ž…๋‹ˆ๋‹ค.
5๋ฒˆ ์„ ์ˆ˜๋Š” 4์œ„์ธ 2๋ฒˆ ์„ ์ˆ˜์—๊ฒŒ ํŒจ๋ฐฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 5์œ„์ž…๋‹ˆ๋‹ค.

๋‚˜์˜ ํ’€์ด

function solution(n, results) {
    const arrayN = Array.from(Array(n),(_,i) => i+1)
    const winHistory = {}
    const loseHistory = {}
    // ๋Œ€์ง„ํ‘œ ๊ฐ ๋ฒˆํ˜ธ ๋ณ„ ์ƒํ™ฉ์„ ๋“ฑ๋ก
    arrayN.forEach(item => {
        winHistory[item] = new Set([])
        loseHistory[item] = new Set([])
    })
    
    results.forEach(result => {
        const [winner, loser] = result
        winHistory[winner].add(loser)
        loseHistory[loser].add(winner)
    })
    
    arrayN.forEach((n) => {
        // i ์„ ์ˆ˜๋ฅผ ์ด๊ธด ์„ ์ˆ˜ ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณต
        for(const winI of loseHistory[n]) {
            // ์Šน๋ฆฌ ๋ช…๋‹จ์— ์—†๋‹ค๋ฉด ์ถ”๊ฐ€ X
            if(!winHistory[winI]) continue
            // i ์—๊ฒŒ ์ง„ ์„ ์ˆ˜๋ฅผ i๋ฅผ ์ด๊ธด ์„ ์ˆ˜์—๊ฒŒ ๋ณต์‚ฌ
            for(const loser of winHistory[n]) {
                winHistory[winI].add(loser)
            }
        }
        
        // i ์—๊ฒŒ ์ง„ ์„ ์ˆ˜ ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณต
        for(const loser of winHistory[n]) {
            // ํŒจ๋ฐฐ ๋ช…๋‹จ์— ์—†๋‹ค๋ฉด ์ถ”๊ฐ€ X
            if(!loseHistory[loser]) continue
            // i ์—๊ฒŒ ์ง„ ์„ ์ˆ˜๋Š” i๋ฅผ ์ด๊ธด ์„ ์ˆ˜์—๊ฒŒ๋„ ํŒจ๋ฐฐ
            for(const winner of loseHistory[n]) {
                loseHistory[loser].add(winner)
            }
        }
    })
    
    return arrayN.reduce((prev,next) => (winHistory[next].size + loseHistory[next].size === n-1 ? prev+1 : prev ) ,0)
}
  1. ์Šน๋ฆฌ ๋ช…๋‹จ๊ณผ ํŒจ๋ฐฐ ๋ช…๋‹จ์˜ ๊ฐ„์„ ์„ ์—ฐ๊ฒฐ

  2. 1๋ฒˆ ์„ ์ˆ˜๋ถ€ํ„ฐ ๋Œ์•„๊ฐ€๋ฉฐ ํŒจ๋ฐฐํ•œ ์„ ์ˆ˜์—๊ฒŒ ํŒจ๋ฐฐํ•œ ์„ ์ˆ˜๋Š” ์Šน๋ฆฌํ•œ ์„ ์ˆ˜์—๊ฒŒ ๋ชจ๋‘ ํŒจ๋ฐฐํ•จ! ์ค‘์š”!!

  3. ์Šน๋ฆฌ ํ•œ ๊ฒฝ๊ธฐ ์ˆ˜ + ์ž๊ธฐ์ž์‹  === n-1 ์ด๋ผ๋ฉด ์ˆœ์œ„๋ฅผ ํ™•์ •์ง€์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ •๋‹ต์— +1

profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€