목록데이터 엔지니어링 정복/Algorithm (159)
지구정복
https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net -문제풀이 숫자를 입력받고 재귀함수를 통해서 팩토리얼을 계산하면 된다. 만약 숫자 n을 입력받으면 재귀함수 안에서 n이 1보다 작거나 같으면 1이 반환되도록하고 그렇지 않으면 n * (n-1) 을 재귀함수의 매개변수로 넣어준다. -자바 package recursive; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BJ10872 { public static i..
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 -문제해설 1. 먼저 변수는 아래와 같고, 모두 전역변수이다. n: 그래프의 크기 arr[][]: 각 선수들 조합에 따른 팀의 능력치들을 담을 2차원 배열 visit[]: 특정 선수가 팀에 배정됐음을 나타내는 방문배열 1차원배열 ans: 최종 정답값 2. arr에 팀의 능력치값들을 입력받는다. 3. cal( int index, int depth ) 메서드를 호출한다. 매개변수인 index는 팀 번호를 의미하고 dept..
https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net -문제해설 이 문제는 dp를 이용해서 풀 수도 있고 dfs를 이용해서 풀 수도 있다. 두 가지 다 한 번 풀어보자! 먼저 dp의 경우 t, p, dp 배열의 크기를 잘 설정해야 한다. 먼저 t, p 배열의 크기는 n+2로 설정해야 한다. 그 이유는 다음과 같다. 문제 예시에서 1일의 상담기간은 3일이니깐 3일째까지는 다른 상담을 못하고 4일째부터 다른 상담을 할 수 있다. 즉 1일째의 p의 값 10은 dp[4]에 저장된다. 만약 7일째의 상담기간이 1일 경우 이 값은 dp[8]에 저장된다. 따라서 배열들의 크기는 n+1을 해줘야하고 ..
https://www.acmicpc.net/problem/18290 18290번: NM과 K (1) 크기가 N×M인 격자판의 각 칸에 정수가 하나씩 들어있다. 이 격자판에서 칸 K개를 선택할 것이고, 선택한 칸에 들어있는 수를 모두 더한 값의 최댓값을 구하려고 한다. 단, 선택한 두 칸이 인접 www.acmicpc.net -문제해설 일단 아이디어는 간단하다. main메서드에서 n m k값 입력받고 좌표값 입력받아서 arr 배열에 넣어준다. 그리고 visit 배열도 만들어준다. 이는 방문처리를 위한 배열이다. findMax( int depth ) 메서드를 호출한다. findMax 메서드에서는 좌표를 (0, 0)에서 (n-1, m-1) 순회한다. 순회하는 값을 행은 i, 열은 j라고 하자. 이때 i, j의 ..