- 알고리즘 분류 : 다이나믹 프로그래밍, Bottom-Up 방식 - 사용 언어 : JAVA - 문제 요점 연속된 한 그룹의 합 중 최대 합을 출력 음수를 포함하더라도 그 이전 혹은 이후의 값이 더 커서 이득일 수 있음 - 점화식 도출 d[i] = Math.max(d[i - 1] + arr[i], arr[i]); (이전의 연속된 수 + 현재 수 or 현재 수) 중 높은 것을 현재 숫자의 최댓값으로 설정 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { publi..
Algorithm
- 알고리즘 분류 : 다이나믹 프로그래밍, Bottom-Up 방식 - 사용 언어 : JAVA - 문제 요점 연속 3계단을 밟을 수 없음 마지막 계단은 꼭 밟아야함 시작 지점은 취급 x - 점화식 도출 d[i] = Math.max(d[i-3]+arr[i-1] + arr[i], d[i-2] + arr[i]); (현재 계단을 포함해 연속 2개 밟기 or 이전 계단 건너 뛰고 현재 계단 밟기) 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IO..
- 알고리즘 분류 : 다이나믹 프로그래밍, Bottom-Up 방식 - 사용 언어 : JAVA - 문제 요점 3잔 연속으로 마시는 것 금지 현재 잔으로부터 이전 3번 째 잔까지만 확인 3번 째 잔부터 아래 3개의 항목 중 값이 큰 항목으로 적용 현재 잔 안마시기 2번째 전의 잔까지 마셨던 거 + 현재 잔 마시기 3번째 잔의 전까지 마셨던 거 + 이전 잔 마시기 + 현재 잔 마시기) 포도주의 잔 갯수는 1이상이므로, d[2] 계산식을 조건에 두어 처리 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static..
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); // N개의 집과 해당 집의 도배에 필요한 각각의 비용을 넣는 변수 int[..
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); // 테스트 케이스 배열 int[] arr = new int[T]; int max = 0; for(int i=0;i
이 포스팅에서 작성하는 내용은 이것이 취업을 위한 코딩테스트다 (나동빈 지음) 에서 발췌하였습니다. 1. 1로 만들기 import java.util.Scanner; public class Main { // 30000까지 포함이므로 30000+1하여 선언 public static int[] d = new int[30001]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); sc.close(); // 다이나믹 프로그래밍 (Bottom-up 방식) for (int i = 2; i
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); br.close(); // 이전 대각선 까지의 칸 갯수 int beforeSum = 0; // 현재 대각선의 칸 갯수 int curren..
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); // 나무의 수 int N = Integer.parseInt(st.nextToken()); // 필요한 나무의..