본문 바로가기

코딩 문제/백준

백준 - 16437번

728x90

 

풀이

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Iterator;

import java.util.LinkedList;

 

public class Main {

 

      static long[] wolf; // 늑대 개수 배열

      static long[] sheep; // 양 개수 배열

      static LinkedList<Integer>[] list; // 각 섬의 연결 리스트

      static boolean[] visited; // 방문 배열

 

      public static void main(String[] args) throws IOException{

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            String[] arr;

            String str = br.readLine();

            int num = Integer.parseInt(str);

            wolf = new long[num+1]; // 늑대 개수 배열 초기화

            sheep = new long[num+1]; // 양 개수 배열 초기화

            list = new LinkedList[num+1]; // 섬 연결 리스트 초기화

            visited = new boolean[num+1]; // 방문 배열 초기화

            for (int i = 0; i <= num; i++) { // 섬 연결 리스트의 리스트 생성

                  list[i] = new LinkedList<Integer>();

            }

 

            // 입력받기

            for(int i=2; i<num+1; i++){

                  str = br.readLine();

                  arr = str.split(" ");

                  if("W".equals(arr[0])){

                        wolf[i] = Long.parseLong(arr[1]);

                  }else{

                        sheep[i] = Long.parseLong(arr[1]);

                  }

                  list[Integer.parseInt(arr[2])].add(i);

            }

            System.out.println(Move(1));

      }

 

      // 깊이 우선 탐색 

      private static long Move(int a){

            visited[a] = true; // 해당 섬 방문

            long countSheep = sheep[a]; // 해당 섬의 양 개수 카운팅

            long countWolf = wolf[a]; // 해당 섬의 늑대 개수 카운팅

            Iterator<Integer> iter = list[a].listIterator();

            while (iter.hasNext()) { 

                  int nextArea = iter.next();

                  if(!visited[nextArea]) {

                        countSheep += Move(nextArea);

                  }

            }

            if(countSheep - countWolf > 0) { // 양 수가 늑대 수보다 많을 경우

                  countSheep -= countWolf;

            }else { // 늑대 수가 양 수보다 많을 경우

                  countSheep = 0;

            }

            return countSheep;

      }

}

'코딩 문제 > 백준' 카테고리의 다른 글

백준 - 13460번  (0) 2023.06.18
백준 - 28086번  (0) 2023.06.18
백준 - 1987번  (0) 2021.03.25
백준 - 10026번  (0) 2021.03.25
백준 - 2468번  (0) 2021.03.25