채용공고 읽기
알고리즘 문제 풀기
기술면접 준비
다른사람 풀이
동적계획법을 이용해 계산식을 줄여주는 방식으로 풀어야 연산속도를 증가시킬 수 있었다
해당 문제에서 dp[i][j]를 0,0.에서 i,j까지의 합을 저장해 놓은 것이라고 가정한다
입력값을 위에 정의에 맞게 dp[][]에 넣는다
for (int i = 1; i <= N; i++) { st = new StringTokenizer(br.readLine());for (int j = 1; j <= M; j++) { dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + Integer.parseInt(st.nextToken()); } }
그럼 i,j ~ x, y의 범위를 구하기 위해서는 dp[x][y]에서 dp[i-1][j]과 dp[i][j-1]을 빼준뒤에 dp[i-1][j-1]이 중복해서 빠졌으니 더해주면 해당 범위에 덧셈을 구할 수 있다
동적 계획법을 이용한 풀이
동적 계획법이 아직 익숙하진 않지만 하나의 값을 구하기 위해 계산과정을 기록하고(그 기록과정 자체도 하위수식들을 활용하여 계산식을 줄인다) 마지막 답은 해당 결과를 수식으로 활용하여 계산식을 확실히 줄여주는게 목표라는 것을 이해한 것 같다
채용공고 읽기 & 지원하기
알고리즘 문제 풀기
기술면접 준비