From f541c8b73c4e7c045bfc54410cc9254dbc91e165 Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Sat, 31 Jan 2026 19:47:33 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=A1=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2092343=20-=20=EC=96=91=EA=B3=BC=20?= =?UTF-8?q?=EB=8A=91=EB=8C=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\352\263\274_\353\212\221\353\214\200.js" | 40 +++++++++++++++++++ Programmers/README.md | 1 + 2 files changed, 41 insertions(+) create mode 100644 "Programmers/Level3/92343_\354\226\221\352\263\274_\353\212\221\353\214\200.js" diff --git "a/Programmers/Level3/92343_\354\226\221\352\263\274_\353\212\221\353\214\200.js" "b/Programmers/Level3/92343_\354\226\221\352\263\274_\353\212\221\353\214\200.js" new file mode 100644 index 0000000..957f584 --- /dev/null +++ "b/Programmers/Level3/92343_\354\226\221\352\263\274_\353\212\221\353\214\200.js" @@ -0,0 +1,40 @@ +/* +⭐️ 문제 정보 ⭐️ +문제 : 92343 - 양과 늑대 +레벨 : Level 3 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/92343 +*/ + +// ANCHOR 2026.01.31풀이 +function solution(info, edges) { + let answer = 0; + const nodeCount = info.length; + // parent-children 관계 정리 + const tree = Array.from({length: nodeCount}, () => []); + edges.forEach(([parent, child]) => tree[parent].push(child)); + + // dfs (양 수집) + // current: 이번에 방문할 노드 + // sheep: 현재 양 수 + // wolf: 현재 늑대 수 + // possible: 방문할 수 있는 다른 노드들 (현재 노드 포함) + function dfs(current, sheep, wolf, possible) { + const [newSheep, newWolf] = info[current] ? [sheep, wolf + 1] : [sheep + 1, wolf]; + // 만약 양이 늑대보다 많지 않다면 게임 오버 (바로 리턴한다.) + if (newSheep <= newWolf) { + return; + } + + // 양의 수 업데이트(더 많은 것으로 업데이트한다.) + answer = Math.max(answer, newSheep); + // 방문 가능 목록 업데이트하기 (이미 방문한 곳은 제거) + const newPossible = new Set(possible); + newPossible.delete(current); + tree[current].forEach((child) => newPossible.add((child))) + // 방문 가능한 모든 노드 시도 + newPossible.forEach((next) => dfs(next, newSheep, newWolf, newPossible)); + } + + dfs(0, 0, 0, new Set([0])) + return answer; +} \ No newline at end of file diff --git a/Programmers/README.md b/Programmers/README.md index 561cf01..b86082c 100644 --- a/Programmers/README.md +++ b/Programmers/README.md @@ -65,6 +65,7 @@ | 87390 | n^2 배열 자르기 | [87390_n^2_배열_자르기.js](Level2/87390_n^2_배열_자르기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/87390) | | 92334 | 신고 결과 받기 | [92334_신고_결과_받기.js](Level1/92334_신고_결과_받기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/92334) | | 92341 | 주차 요금 계산 | [92341_주차_요금_계산.js](Level2/92341_주차_요금_계산.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/92341) | +| 92343 | 양과 늑대 | [92343_양과_늑대.js](Level3/92343_양과_늑대.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/92343) | | 118666 | 성격 유형 검사하기 | [118666_성격_유형_검사하기.js](Level1/118666_성격_유형_검사하기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/118666) | | 118667 | 두 큐 합 같게 만들기 | [118667_두_큐_합_같게_만들기.js](Level2/118667_두_큐_합_같게_만들기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/118667) | | 118669 | 등산코스 정하기 | [118669_등산코스_정하기.js](118669_등산코스_정하기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/118669) |