용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (248)
    • 개발 (75)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (19)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(JAVA) 양과 늑대
알고리즘/알고리즘 문제 풀이

(JAVA) 양과 늑대

2024. 2. 6. 23:56

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/92343

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

class Solution {
    int[] gInfo; // DFS에서 사용할 노드의 정보
    int[][] gEdges; // DFS에서 사용할 간선의 정보
    int maxValue = 0;
    
    public int solution(int[] info, int[][] edges) {
        gInfo = info;
        gEdges = edges;
        boolean[] isVisited = new boolean[info.length]; // 노드에 방문하였는지 체크하는 배열
        dfs(isVisited, 0, 0, 0); // DFS로 트리 순회
        return maxValue;
    } 
    
    public void dfs(boolean[] isVisited, int idx, int sheep, int wolf){
        isVisited[idx] = true; // 방문 표시
        if (gInfo[idx] == 0) { // 노드가 양이 위치한 노드라면
            sheep++; // 양을 카운트업
            if(sheep > maxValue) maxValue = sheep; // 현재 양의 수가 최대값을 넘어섰다면 최대값 업데이트
        }
        else wolf++; // 늑대가 위치한 노드라면 늑대를 카운트업
        
        if (sheep <= wolf) return; // 늑대가 더 많아지면 DFS 종료
        
        for (int[] edge : gEdges) { 
            if (isVisited[edge[0]] && !isVisited[edge[1]]) { // 간선에서 부모만 방문한 상태라면
            	boolean[] nextVisited = new boolean[isVisited.length]; // 다음 DFS에서 사용할 방문 여부 체크 배열 선언
            	for (int i = 0; i < isVisited.length; i++) { // 현재 방문 내역 복사
                	nextVisited[i] = isVisited[i];
            	}
                dfs(nextVisited, edge[1], sheep, wolf); // 다시 DFS
            }
        }
    }
}

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(JAVA) 올바른 괄호의 갯수  (1) 2024.02.14
(JAVA) 올바른 괄호의 갯수  (0) 2024.02.12
(JAVA) 합승 택시 요금  (0) 2024.02.01
(JAVA) 길 찾기 게임  (0) 2024.01.24
(JAVA) 금과 은 운반하기  (3) 2024.01.21
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (JAVA) 올바른 괄호의 갯수
    • (JAVA) 올바른 괄호의 갯수
    • (JAVA) 합승 택시 요금
    • (JAVA) 길 찾기 게임
    용꿀
    용꿀

    티스토리툴바