๐งก๋ฌธ์ ์ค๋ช
2์ง ํธ๋ฆฌ ๋ชจ์ ์ด์์ ๊ฐ ๋ ธ๋์ ๋๋์ ์์ด ํ ๋ง๋ฆฌ์ฉ ๋์ฌ ์์ต๋๋ค. ์ด ์ด์์ ๋ฃจํธ ๋ ธ๋์์ ์ถ๋ฐํ์ฌ ๊ฐ ๋ ธ๋๋ฅผ ๋์๋ค๋๋ฉฐ ์์ ๋ชจ์ผ๋ ค ํฉ๋๋ค. ๊ฐ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋ ๋ง๋ค ํด๋น ๋ ธ๋์ ์๋ ์๊ณผ ๋๋๊ฐ ๋น์ ์ ๋ฐ๋ผ์ค๊ฒ ๋ฉ๋๋ค. ์ด๋, ๋๋๋ ์์ ์ก์๋จน์ ๊ธฐํ๋ฅผ ๋ ธ๋ฆฌ๊ณ ์์ผ๋ฉฐ, ๋น์ ์ด ๋ชจ์ ์์ ์๋ณด๋ค ๋๋์ ์๊ฐ ๊ฐ๊ฑฐ๋ ๋ ๋ง์์ง๋ฉด ๋ฐ๋ก ๋ชจ๋ ์์ ์ก์๋จน์ด ๋ฒ๋ฆฝ๋๋ค. ๋น์ ์ ์ค๊ฐ์ ์์ด ๋๋์๊ฒ ์ก์๋จนํ์ง ์๋๋ก ํ๋ฉด์ ์ต๋ํ ๋ง์ ์์ ์์ ๋ชจ์์ ๋ค์ ๋ฃจํธ ๋ ธ๋๋ก ๋์์ค๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ(๋ฃจํธ ๋ ธ๋์๋ ํญ์ ์์ด ์์ต๋๋ค) 0๋ฒ ๋ ธ๋(๋ฃจํธ ๋ ธ๋)์์ ์ถ๋ฐํ๋ฉด ์์ ํ๋ง๋ฆฌ ๋ชจ์ ์ ์์ต๋๋ค. ๋ค์์ผ๋ก 1๋ฒ ๋ ธ๋๋ก ์ด๋ํ๋ฉด ๋น์ ์ด ๋ชจ์ ์์ ๋ ๋ง๋ฆฌ๊ฐ ๋ฉ๋๋ค. ์ด๋, ๋ฐ๋ก 4๋ฒ ๋ ธ๋๋ก ์ด๋ํ๋ฉด ๋๋ ํ ๋ง๋ฆฌ๊ฐ ๋น์ ์ ๋ฐ๋ผ์ค๊ฒ ๋ฉ๋๋ค. ์์ง์ ์ 2๋ง๋ฆฌ, ๋๋ 1๋ง๋ฆฌ๋ก ์์ด ์ก์๋จนํ์ง ์์ง๋ง, ์ดํ์ ๊ฐ ์ ์๋ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋ชจ๋ ๋ ธ๋(2, 3, 6, 8๋ฒ)์๋ ๋๋๊ฐ ์์ต๋๋ค. ์ด์ด์ ๋๋๊ฐ ์๋ ๋ ธ๋๋ก ์ด๋ํ๋ค๋ฉด(์๋ฅผ ๋ค์ด ๋ฐ๋ก 6๋ฒ ๋ ธ๋๋ก ์ด๋ํ๋ค๋ฉด) ์ 2๋ง๋ฆฌ, ๋๋ 2๋ง๋ฆฌ๊ฐ ๋์ด ์์ด ๋ชจ๋ ์ก์๋จนํ๋๋ค. ์ฌ๊ธฐ์๋ 0๋ฒ, 1๋ฒ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ์์ 2๋ง๋ฆฌ ๋ชจ์ ํ, 8๋ฒ ๋ ธ๋๋ก ์ด๋ํ ํ(์ 2๋ง๋ฆฌ ๋๋ 1๋ง๋ฆฌ) ์ด์ด์ 7๋ฒ, 9๋ฒ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ์ 4๋ง๋ฆฌ ๋๋ 1๋ง๋ฆฌ๊ฐ ๋ฉ๋๋ค. ์ด์ 4๋ฒ, 6๋ฒ ๋ ธ๋๋ก ์ด๋ํ๋ฉด ์ 4๋ง๋ฆฌ, ๋๋ 3๋ง๋ฆฌ๊ฐ ๋๋ฉฐ, ์ด์ 5๋ฒ ๋ ธ๋๋ก ์ด๋ํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์์ ์ต๋ 5๋ง๋ฆฌ ๋ชจ์ ์ ์์ต๋๋ค.
๊ฐ ๋
ธ๋์ ์๋ ์ ๋๋ ๋๋์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด info
, 2์ง ํธ๋ฆฌ์ ๊ฐ ๋
ธ๋๋ค์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด edges
๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฌธ์ ์ ์ ์๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด์ ๋ชจ์ ์ ์๋ ์์ ์ต๋ ๋ช ๋ง๋ฆฌ์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐์ ํ์ฌํญ
info
์ ๊ธธ์ด โค 17info
์ ์์๋ 0 ๋๋ 1 ์
๋๋ค.edges
์ ์ธ๋ก(ํ) ๊ธธ์ด = info์ ๊ธธ์ด - 1edges
์ ๊ฐ๋ก(์ด) ๊ธธ์ด = 2edges
์ ๊ฐ ํ์ [๋ถ๋ชจ ๋
ธ๋ ๋ฒํธ, ์์ ๋
ธ๋ ๋ฒํธ] ํํ๋ก, ์๋ก ์ฐ๊ฒฐ๋ ๋ ๋
ธ๋๋ฅผ ๋ํ๋
๋๋ค.๐์ ์ถ๋ ฅ ์
info | edges | result |
---|---|---|
[0,0,1,1,1,0,1,0,1,0,1,1] | [[0,1],[1,2],[1,4],[0,8],[8,7],[9,10],[9,11],[4,3],[6,5],[4,6],[8,9]] | 5 |
[0,1,0,1,1,0,1,0,0,1,0] | [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6],[3,7],[4,8],[6,9],[9,10]] | 5 |
๐์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
์ฃผ์ด์ง ์ ๋ ฅ์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
0๋ฒ - 2๋ฒ - 5๋ฒ - 1๋ฒ - 4๋ฒ - 8๋ฒ - 3๋ฒ - 7๋ฒ ๋ ธ๋ ์์ผ๋ก ์ด๋ํ๋ฉด ์ 5๋ง๋ฆฌ ๋๋ 3๋ง๋ฆฌ๊ฐ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ 6๋ฒ, 9๋ฒ ๋ ธ๋๋ก ์ด๋ํ๋ฉด ์ 5๋ง๋ฆฌ, ๋๋ 5๋ง๋ฆฌ๊ฐ ๋์ด ์์ด ๋ชจ๋ ์ก์๋จนํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋๋์๊ฒ ์ก์๋จนํ์ง ์๋๋ก ํ๋ฉด์ ์ต๋๋ก ๋ชจ์ ์ ์๋ ์์ 5๋ง๋ฆฌ์ ๋๋ค.
๐์ ํ์๊ฐ ์๋ด
์ ํ์ฑ ํ ์คํธ : 10์ด
๐ค๋์ ํ์ด
function solution(info, edges) {
// ์ ๋ต ๋ณ์
let result = 0
// ์ฐ๊ฒฐ๋ ๊ธธ์ ์์ฑํจ
const paths = Array.from({length: info.length}, () => [])
for(let i = 0 ; i < edges.length ; i ++) {
const [s, e] = edges[i]
paths[s].push(e)
}
function dfs(curNode, canReach, wolf, sheep) {
// ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๊ณณ ๋ณต์ฌ
const curReach = [...canReach]
// ํ์ฌ ์์นํ ๊ณณ์ ์ธ๋ฑ์ค๊ฐ
const curIdx = curReach.indexOf(curNode)
// ํ์ฌ ๋
ธ๋์ ๊ฐ์ด ๋๋์ธ์ง ์์ธ์ง ๊ฒ์ฌ
if(info[curNode]) {
wolf++
} else {
sheep++
}
// ์์ ์๊ฐ ์ต๋์ธ์ง ๊ฒ์ฌ
result = Math.max(result, sheep)
// ์์ด ๋๋์๊ฒ ์ก์๋จนํ๋ค๋ฉด
if(wolf === sheep) return
// ๋ฐฉ๋ฌธ ๋ชฉ๋ก์ ํ์ฌ ์์น์์ ๊ฐ ์ ์๋ ์ฅ์ ์ถ๊ฐ
curReach.push(...paths[curNode])
// ํ ์์น ์ ๊ฑฐ
curReach.splice(curIdx, 1)
// ๋ฐฉ๋ฌธ์ด ๊ฐ๋ฅํ ๊ณณ dfs ํ์
for (const nextNode of curReach) {
dfs(nextNode, curReach, wolf, sheep);
}
}
dfs(0, [0], 0, 0)
return result
}