알고리즘 연습노트
오늘의 문제
내가푼 코드
public class problem145 {
static int MAX = 0;
static int baseArray[] = new int[3];
public static void solution(int N, int[] W){
if(N == 0){
int temp = 0;
System.out.print("this time : ");
for(int i = 0; i < W.length; i++){
System.out.print(W[i]);
temp += Math.pow(W[i], 2);
}
System.out.println();
MAX = Math.max(MAX, temp);
System.out.println(MAX);
W = baseArray.clone();
return;
}
for(int i = 0; i < W.length; i++){
W[i] = W[i]-1;
solution(N-1, W);
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int work[] = {4,3,3};
int n = 4;
baseArray = work.clone();
solution(n, work);
}
}
설계 노트
- 전체탐색을 하여서 최소의 경우를 찾을려고 함.
- 시간(N)과 각 작업량을 한개씩 줄여(-1) 재귀 호출을 한다.
- 시간(N)을 다 사용하면 현재의 작업량에 대한 야근지수를 구한다.
- 이전에 구한 야근지와 비교하여 최대값을 구한다.
발견된 오류 및 코드 분석
-
배열의 값은 call by reference여서 함수를 return 하여도 이전의 값으로 원복 되지 않는다.
- 전체 탐색자체가 구현하기 쉽다는 착각에서 접근을 하였지만 오히려 재귀의 함수에 봉착.
-
전체 탐색을 하는 재귀 호출부분도 잘못되었다.
- 각 작업별 접근을 하기 위해서 작업의 길이만큼 반복을 하게 두었는데, 전체의 경우를 탐색하지 못하는 것 같다.
- 화면에 숫자를 찍어서 전체의 경우의 수를 도는지 확인이 필요.
소요 시간
- 설계 25분
- 구현 25분
- 오류분석 25분
참고한 사이트
'알고리즘' 카테고리의 다른 글
해커랭크 자료구조 문제풀이 (DynamicArray) (0) | 2018.01.16 |
---|---|
해커랭크 자료구조 문제풀이 (DynamicArray) (0) | 2018.01.15 |
해커랭크 자료구조&알고리즘 문제풀이 (Hackerrank 2DArray) (0) | 2018.01.12 |
해커랭크 삽입정렬 문제 javascript 풀이 (Hackerrank InsertionSort) (0) | 2018.01.11 |