프로그래머스 2단계 : 땅따먹기 (Java 자바)

2023. 9. 28. 19:44·💻 코딩테스트/programmers
728x90
문제설명

 

땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다.

예를 들면,

| 1 | 2 | 3 | 5 |

| 5 | 6 | 7 | 8 |

| 4 | 3 | 2 | 1 |

로 땅이 주어졌다면, 1행에서 네번째 칸 (5)를 밟았으면, 2행의 네번째 칸 (8)은 밟을 수 없습니다.

마지막 행까지 모두 내려왔을 때, 얻을 수 있는 점수의 최대값을 return하는 solution 함수를 완성해 주세요. 위 예의 경우, 1행의 네번째 칸 (5), 2행의 세번째 칸 (7), 3행의 첫번째 칸 (4) 땅을 밟아 16점이 최고점이 되므로 16을 return 하면 됩니다.

 

 

 

제한사항

 

  • 행의 개수 N : 100,000 이하의 자연수
  • 열의 개수는 4개이고, 땅(land)은 2차원 배열로 주어집니다.
  • 점수 : 100 이하의 자연수

 

입출력 예

 

 

풀이

 

주어진 땅(land)을 특정 규칙에 따라 밟아 내려올 때, 얻을 수 있는 최대 점수를 계산하는 문제입니다. 동적 프로그래밍(Dynamic Programming)을 활용했습니다.

 

1. 반복문을 사용하여 땅의 각 행을 순차적으로 처리합니다.

(i는 행을 나타냅니다. i는 1부터 시작하여 첫 번째 행은 이미 점수가 주어진 상태입니다.)

2. 현재 행의 각 열(칸)에 대해, 이전 행까지의 최대 점수를 고려하여 최대 점수를 계산합니다.

현재 행의 각 열은 이전 행의 해당 열을 제외한 나머지 열 중에서 최대 값을 더한 결과입니다.

3. 계산된 최대 점수를 현재 행의 해당 열에 더해주면서 현재 행을 업데이트합니다.

4. 모든 행에 대한 처리가 끝나면, 마지막 행의 네 열 중에서 최대 점수를 찾아냅니다.

5. 마지막으로 최대 점수를 반환합니다. 주어진 땅을 밟아 내려올 때 얻을 수 있는 최대 점수를 계산합니다.

 

import java.util.Arrays;

class Solution {
    int solution(int[][] land) {
        for (int i = 1; i < land.length; i++) {
            // 현재 행의 각 열에 대한 최대 점수 계산
            land[i][0] += Math.max(Math.max(land[i - 1][1], land[i - 1][2]), land[i - 1][3]);
            land[i][1] += Math.max(Math.max(land[i - 1][0], land[i - 1][2]), land[i - 1][3]);
            land[i][2] += Math.max(Math.max(land[i - 1][0], land[i - 1][1]), land[i - 1][3]);
            land[i][3] += Math.max(Math.max(land[i - 1][0], land[i - 1][1]), land[i - 1][2]);
        }

        // 마지막 행의 네 열 중에서 최대 점수를 찾습니다.
        int max = Arrays.stream(land[land.length - 1]).max().getAsInt();

        return max;
    }
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'💻 코딩테스트 > programmers' 카테고리의 다른 글

프로그래머스 2단계 : 가장 큰 수 (Java 자바)  (0) 2023.09.28
프로그래머스 2단계 : 오픈채팅방 (Java 자바)  (0) 2023.09.28
프로그래머스 2단계 : 모음사전 (Java 자바)  (1) 2023.09.28
프로그래머스 2단계 : 전화번호 목록 (Java 자바)  (0) 2023.09.28
프로그래머스 2단계 : 타겟 넘버 (Java 자바)  (0) 2023.09.21
'💻 코딩테스트/programmers' 카테고리의 다른 글
  • 프로그래머스 2단계 : 가장 큰 수 (Java 자바)
  • 프로그래머스 2단계 : 오픈채팅방 (Java 자바)
  • 프로그래머스 2단계 : 모음사전 (Java 자바)
  • 프로그래머스 2단계 : 전화번호 목록 (Java 자바)
gxxg
gxxg
함께 일하고 싶은 개발자를 꿈꾸는 예비개발자의 공부 기록
  • gxxg
    공공
    gxxg
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • ☁️ 구름 x 카카오 Deep Dive 풀스택 (7)
        • html, css (1)
        • Java (3)
        • 스프링 MVC (0)
      • 💻 코딩테스트 (89)
        • 백준 (2)
        • programmers (87)
      • SQLD (1)
      • Language (3)
        • Java (2)
        • JavaScript (1)
      • Style Sheet (0)
        • CSS (0)
        • SCSS & SASS (0)
      • DBMS (2)
        • Oracle (2)
        • MySQL (0)
        • postgresql (0)
        • 데이터베이스 기초 이론 (0)
      • React (0)
      • SpringBoot (0)
      • JSP (2)
      • 알고리즘 (0)
      • 2023-02 몰입형 SW 정규 교육 (24)
        • 9월 프로젝트 (8)
      • 벽돌깨기 (4)
      • Etc (4)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    2단계
    오블완
    JSP
    톰캣
    LV3
    구현체
    spring
    티스토리챌린지
    코테
    자바
    CSS
    javascript
    Lv0
    코딩테스트
    프로젝트 구조
    java
    DFS
    eclipse
    POST
    자바스크립트
    0단계
    3단계
    HTML
    프로그래머스
    junit 테스트
    programmers
    Lv2
    이클립스
    springboot
    회원 관리 시스템
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gxxg
프로그래머스 2단계 : 땅따먹기 (Java 자바)
상단으로

티스토리툴바