inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)

문제1) Dp01

Dp HouseRobber 질문

222

Sung Rak

작성한 질문수 14

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 코테 준비 같이 해요!

답변 1

1

푸샵맨 코딩스터디

안녕하세요~

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

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

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

경우의 수를 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

248

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