https://school.programmers.co.kr/learn/courses/30/lessons/92343
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2진 트리 형태로 되어있고, 양의 수 > 늑대의 수를 유지하며 최대한 많은 양을 확보해야하는 문제이다.
처음에는 우선 순위 큐와 유니온 파인드를 활용하여 풀어볼라 했지만, 아이디어를 얻기 힘들어 다른 방식을 생각했다.
기본적으로 DFS 방식으로 시작 위치인 0번째 노드부터 탐색을 시작하며 양인지 늑대인지 확인 후
양인 경우 최대로 모인 양의 수와 비교하며 갱신하고, 늑대의 수가 양의 수와 같아지는 경우 DFS 탐색을 종료하는 방식으로 구현했다.
각 DFS 마다 edges 배열을 전부 확인하며 아직 방문하지 않은 노드로 연결된 간선이 있는 경우 해당 위치로 이동하여
DFS를 진행하는 방식으로 진행했다.
import java.io.*;
import java.util.*;
import java.math.*;
class Solution {
static int answer,N;
public void dfs(int idx, boolean isVisited[], int info[], int edges[][], int lamb, int wolf){
isVisited[idx] = true;
if(info[idx]==0){
lamb++;
answer = Math.max(answer,lamb);
}
else{
wolf++;
}
if(lamb<=wolf){
return;
}
for(int next[] : edges){
if(isVisited[next[0]] && !isVisited[next[1]]){
dfs(next[1], isVisited, info, edges, lamb, wolf);
isVisited[next[1]] = false;
}
}
}
public int solution(int[] info, int[][] edges) {
N = info.length;
boolean isVisited[] = new boolean[N];
answer = 0;
dfs(0,isVisited,info,edges,0,0);
return answer;
}
}
'알고리즘 > 알문풀(백준, 프로그래머스, 코드트리)' 카테고리의 다른 글
[알고리즘] BOJ 11265 끝나지 않는 파티 (JAVA) (0) | 2024.05.28 |
---|---|
[알고리즘] 2022 KAKAO TECH INTERNSHIP 코딩테스트 공부 (Java) (0) | 2024.04.25 |
[알고리즘] 2022 KAKAO BLIND 파괴되지 않은 건물 (Java) (0) | 2024.03.27 |
[알고리즘] 2022 KAKAO BLIND k진수에서 소수 개수 구하기 (Java) (0) | 2024.03.14 |
[알고리즘] BOJ 10942 팰린드롬? (JAVA) (0) | 2024.03.07 |
댓글