5215 햄버거 다이어트 문제 링크
#1
import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;
class Solution
{
static int N;
static int maxCal;
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int T;
T=Integer.parseInt(st.nextToken());
for(int test_case = 1; test_case <= T; test_case++)
{
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
maxCal = Integer.parseInt(st.nextToken());
int[] score = new int[N];
int[] cal = new int[N];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
score[i] = Integer.parseInt(st.nextToken());
cal[i] = Integer.parseInt(st.nextToken());
}
int answer = dfs(score, cal, 0, 0, 0);
System.out.println("#"+test_case+" "+answer);
}
}
static int dfs(int[] score, int[] cal, int totalS, int totalC, int level) {
if(level==N) return totalS;
int a = totalS;
if(totalC+cal[level]<=maxCal) {
a += score[level];
totalC += cal[level];
totalS = Math.max(dfs(score, cal, a, totalC, level + 1), totalS);
a -= score[level];
totalC -= cal[level];
}
totalS = Math.max(dfs(score, cal, a, totalC, level+1), totalS);
return totalS;
}
}

- 빽트래킹 문제인 듯
- 이것도 오랜만에 하니까 오래 걸렸네..
- level 체크를 이상하게 해서 그거 잡느라 오래 걸렸음
2805 농작물 수확하기 문제 링크
#2
15분
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T;
T=Integer.parseInt(br.readLine());
for(int test_case = 1; test_case <= T; test_case++)
{
int N = Integer.parseInt(br.readLine());
int[][] map = new int[N][N];
String a;
for(int i=0; i<N; i++) {
a = br.readLine();
for(int j=0; j<N; j++) {
map[i][j] = a.charAt(j) - '0';
}
}
int answer = 0;
int start = N/2;
int mid = N/2;
int end = N/2;
for(int i=0; i<N/2; i++) {
while (mid<=end) {
answer += map[i][mid];
mid++;
}
start--;
end++;
mid = start;
}
for(int i=N/2; i<N; i++) {
while (mid<=end) {
answer += map[i][mid];
mid++;
}
start++;
end--;
mid = start;
}
System.out.println("#"+test_case+" "+answer);
}
}
}
