목록dfs (5)
공부하는 스누피
https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 생각과정 - 팀원이 추가될 때마다 기존 팀원들과 추가된 팀원 상호간 더해지는 능력치를 추가 - 팀 구성이 완료되면 능력치 차이 최솟값 구하기 (dfs) 구현 package baekjoon; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class b14889 { public int minA = Integer.MAX_..
https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 생각과정 - 날짜별 상담소요시간과 금액을 T, P 배열에 저장한다. - 현재 날짜가 n이 될 때까지 재귀 함수를 호출한다. - 재귀함수는 하루당 두 번 호출될 수 있는데, 각각 해당 날짜에 상담했을 경우와 하지 않았을 경우를 호출한다. - 현재 날짜를 선택할 경우 상담소요시간이 퇴사 이전이어야 한다. - 경우의 수를 구한 후 최댓값만 찾으면 되므로 DFS를 쓰면 간단히 풀 수 있는 문제다. 구현 import java.util.Scanner; public class Main { public int maxP = 0; public void..
https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크� www.acmicpc.net 생각과정 - 벽을 3개 세우는 모든 경우의 수 구하기 => DFS - 벽 다 세우면 바이러스 퍼뜨리기 - 상하좌우로 퍼져나가는데, 감염된 칸에서도 퍼져나가야 한다 - 재귀함수 spread를 사용해서 감염된 칸의 상하좌우로 퍼져나가는데, 벽을 만나면 멈춘다. 이때 감염시킨 칸에서 spread 함수를 새로 호출시킨다. 다 퍼뜨리면 감염 지도를 return한다. - spread 종료 후 안전 영역을 검사한다. 구..
https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, �� www.acmicpc.net 생각과정 - 모든 경우의 수를 탐색해 최대 최소를 구해야 한다 => dfs - 계산할 때마다 연산자 개수를 감소시킨다. - 계산이 끝나면 최대 최소 인스턴스 변수와 비교한다. 구현 package baekjoon; import java.util.Scanner; public class b14504 { public int max = -1000..
https://programmers.co.kr/learn/courses/30/lessons/42840# 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 �� programmers.co.kr 생각과정 - 3가지 패턴별로 답안을 작성한다 - DFS 함수를 만들어 완전탐색 알고리즘을 재사용한다 - 재귀를 사용해 문제가 많을수록 시간이 오래 걸리는 단점이 있다. => 채점할 때 효율성 검사를 안하는걸 보니 상관없는듯? 구현 import java.util.ArrayList; class Solution { public int[] solution(int..