코테/프로그래머스

[프로그래머스/Lv. 2] 땅따먹기 (JAVA)

imname1am 2024. 1. 16. 00:51
반응형

📖 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

💡  풀이 방식

• DP

1. dp 배열의 값을 초기화한다.

   - 0번째 행의 값은 land 배열의 값 그대로 채운다.

 

2. 1 ~ (land.length - 1)행까지 dp 배열을 채운다.

  - 0번째 열인 경우, 이전 행의 1,2,3열의 값 中 큰 값과 land배열에서 현재 좌표 위치에 있는 값 land[i][0]을 더한다.

  - 1번째 열인 경우, 이전 행의 0,2,3열의 값 中 큰 값과 land배열에서 현재 좌표 위치에 있는 값 land[i][1]을 더한다.

  - 2번째 열인 경우, 이전 행의 0,1,3열의 값 中 큰 값과 land배열에서 현재 좌표 위치에 있는 값 land[i][2]을 더한다.

  - 3번째 열인 경우, 이전 행의 0,1,2열의 값 中 큰 값과 land배열에서 현재 좌표 위치에 있는 값 land[i][3]을 더한다.

 

3. 마지막 행에서 최댓값을 구하고 출력한다.

 

 

 

💥 유의사항

완전탐색으로 풀면 틀린다

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
 
class Solution {
    int solution(int[][] land) {
        int answer = 0;
        int len = land.length;
        
        int[][] dp = new int[len][4];
 
        // dp 배열 0번째 행 값 초기화
        for(int i = 0 ; i < 4 ; i++) {
            dp[0][i] = land[0][i];
        }
        
        // dp 배열 값 채우기 (이전 행에서 다른 3열의 값 중 가장 큰 값 찾아 현재 land 배열 칸의 값과 더하기)
        for(int i = 1 ; i < len ; i++) {
            dp[i][0= getMax(dp[i - 1][1], dp[i - 1][2], dp[i - 1][3]) + land[i][0];
            dp[i][1= getMax(dp[i - 1][0], dp[i - 1][2], dp[i - 1][3]) + land[i][1];
            dp[i][2= getMax(dp[i - 1][0], dp[i - 1][1], dp[i - 1][3]) + land[i][2];
            dp[i][3= getMax(dp[i - 1][0], dp[i - 1][1], dp[i - 1][2]) + land[i][3];
        }
        
        // 마지막 행에서 가장 큰 값 찾아 출력하기
        for(int i = 0 ; i < 4 ; i++) {
            answer = Math.max(answer, dp[len - 1][i]);
        }
 
        return answer;
    }
    
    // 세 값 중 가장 큰 값 구하는 메소드
    private static int getMax(int a, int b, int c) {
        return Math.max(Math.max(a, b), c);
    }
}
cs

 

 

➕ 다른 풀이 방식

- 더 간단하게는 이렇게,, dp배열 따로 만들 필요가 없었던 것이다,,

 

[프로그래머스] level2. 땅따먹기 (자바 JAVA)

[ 문제 ] [프로그래머스] level2. 땅따먹기 (자바 JAVA) 문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)

ilmiodiario.tistory.com

 

 

- 이런 3중 for문 풀이도..!

 

[프로그래머스] 땅따먹기 (JAVA)

문제 출처 - Programmers 문제는 여기 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부

blackvill.tistory.com


💦 어려웠던 점

처음에 그저 완탐,, 으로 풀 생각을 하였는데 그게 아니라 DP 문제였던 것이다,,

30분 완탐해보다가 안되어서 DP로 풀어봤더니 맞았다,,,

좀 접근 방식 찾기까지 돌아오긴 했지만 그래도 혼자 풀어서 뿌듯해ㅠㅠ

 

 

 

1회독 2회독 3회독 4회독 5회독
V        

 

반응형