n개의 문제와 제한 시간 m이 주어진다. 각 문제는 점수와 풀이 시간이 주어진다. 제한 시간 m안에 n개의 문제중 최대 점수를 얻을 수 있도록 해야 한다.
int n // (문제 갯수)
,
int arr[][] // (n개의 문제)
,
int L // (현재 레벨)
,
int rowsum // (문제 점수의 합)
,
int colsum // (문제 풀이 시간의 합)
,
int m // (제한 시간 m)
,
DFS() 메서드 // 핵심 로직
,
answer // 출력
,
public void DFS(int L, int rowSum, int colSum){
if(colSum > m) return;
if(L == n){
answer = Math.max(answer, rowSum);
}
else{
DFS(L+1, rowSum+arr[L][0], colSum+arr[L][1]);
DFS(L+1, rowSum, colSum);
}
}
문제에서 요구하는 자료구조와 알고리즘을 파악했고 손이나, 메모장으로 자료구조를 그려보면서 문제를 풀이했다.
그러다보니 어렵게 느껴졌던 문제도 자료구조가 그려지면서 감이 오기 시작했고,
이차원 배열 자료구조를 선택
하고,
DFS 알고리즘을 그려보면서 어떤 매개변수가 들어갈지 선택
할 수 있었다.
DFS에서 o,x
방식을 사용한 문제를 풀이하는게 한결 쉬워졌다.
자료구조 설정
과, 어떤 알고리즘
을 선택하느냐인 것 같다.