inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Các khái niệm và vấn đề bạn phải biết trước khi thi viết code (với Java)

Vấn đề 1) Dp01

Dp HouseRobber 질문

222

Sung Rak

14 câu hỏi đã được viết

1

안녕하세요. DP문제를 풀어보는데 있어,

다른 응용문제를 보고 풀다가 단위케이스에 걸려

문의드립니다.

릿코드에서는 정상적으로 통과 되었지만,

이 문제와 동일한 프로그래머스 사이트에 "도둑질" 문제에서는 단위케이스 걸려 실패하였습니다.. ㅠㅠ

아래에 링크 첨부 드립니다.

https://programmers.co.kr/learn/courses/30/lessons/42897

기존 문제는 제가 아래와 같이 풀었으나

선생님 공식과 조금 다른것 같아, 혹시 문제 유형이 다른건지

 헷갈리기 시작했습니다. ㅠ

public int solution(int[] money) {
int moneyLength = money.length;
// dp배열은 처음 집을 훔치기때문에 인접한 마지막 집은 훔칠수 없으므로 반복문은 length-1 전까지만
int[] dp = new int[moneyLength-1];
// 처음 집 안 훔칠 때
int[] dp2 = new int[moneyLength];

// dp[0] dp[1] 0번째 집부터 1번째 집까지 가장 많이 훔칠수 있는 금액인데 0번집을 훔치기때문에
// 1번째 집은 훔칠수 없게 되고 dp[1]까지의 가장큰 금액은 첫번째 집을 훔친 경우이므로 dp[0],dp[1]에는 0번 집의 돈을 넣어 줬습니다.
dp[0] = money[0];
dp[1] = money[0];
dp2[2] = 0;
dp2[1] = money[1];

// 반복문을 돌면서 두번째 전의 최대 돈에 현재 번째 집의 돈을 합친것과 이전의 최대 돈을 비교하여 dp배열을 채웁니다.
// 2가지 경우를 각각 money 배열의 인덱스만큼 왔을 때 누적시킨 dp값들의 max 값을 구하여 메모제이션 해줌
for (int i = 2; i < moneyLength-1; i++) {
dp[i]=Math.max(dp[i-2]+money[i],dp[i-1]);
}

// dp2는 첫번째 집에서는 돈을 훔치지 않으므로 반복문은 length까지 돌렸습니다.
for(int i=2; i<moneyLength; i++) {
dp2[i]=Math.max(dp2[i-2]+money[i],dp2[i-1]);
}

// dp dp2의 마지막 값을 비교하여 더 큰값을 출력 하여 정답을 구하였습니다.
return Math.max(dp[moneyLength-2],dp2[moneyLength-1]);
}

java 코테 준비 같이 해요!

Câu trả lời 1

1

pushupman

안녕하세요~

네 이건 문제 유형이 다릅니다.

제가 푼건 집이 고리처럼 연결되지 않았습니다.

올려주신 문제는 고리처럼 연결이 되어 있어서, 

경우의 수를 2개를 가지고 갔기때문에  저장 공간(dp[]) 를 2개 만든겁니다.

public int solution(int[] money) {

        int answer = 0;

        int n = money.length;

        int[] dp1 = new int[n];

        dp1[0] = money[0];

        dp1[1] = dp1[0];

        for(int i = 2; i < n-1; i++) {

            dp1[i] = Math.max(dp1[i-1], dp1[i-2] + money[i]);

        }

        int[] dp2 = new int[n];

        dp2[0] = 0;

        dp2[1] = money[1];

        for(int i = 2; i < n; i++) {

            dp2[i] = Math.max(dp2[i-1], dp2[i-2] + money[i]);

        }

        answer = Math.max(dp1[n-2], dp2[n-1]); 

        return answer;

    }

질문 드립니다!

1

249

1

PriorityQueue

1

337

1

면적을 구하는 res를 for문 내에 있는 if문 안에 넣으면 되지 않나요?

1

311

1

강의에 있는 자료구조만 공부하면 되나요??

1

229

1

bfs, dfs 강의 자료

1

241

1

문제가 이해가 안가요

1

323

1

만약 문자열이 매칭되는 조건("arrest", "test")이 문자열의 인덱스 기준 뒤에서부터 발생하면 어떻게 풀어야할까요?

2

434

1

그림이 잘 이해되지 않습니다.

1

182

1

어떤 문제인지에 대한 설명이 없어서 이해가 안가네요;;

1

300

3

강사님 문제가 잘 이해가 안가요

3

180

1

merge함수 질문 있습니다.

1

226

1

dp 강의자료 어딧어요??

1

379

2

응용문제4) DFS 응용문제 질문이요!

1

161

1

DP 1분 간단 영상이 보이지 않습니다.

1

285

1

스택 문제 영상이 추가적으로 들어갔습니다.

1

158

1

list 질문입니다

2

189

1

DP문제 문의

1

237

2

Comparator 질문입니다.

1

468

2

안녕하세요. 질문입니다.

1

262

1

BFS 게임 맵 최단거리 문의

1

328

3

코딩테스트 처음 입문 했는데 질문이 있습니다.

1

153

1

안녕하세요. 수강생입니다. 이 강의만 전부 소스 보낼 수 있을까요?

1

159

1

추가 강의 문의.

1

367

3

개념 설명이 잘못나온거 같습니다.

1

157

1