문제 설명
땅따먹기 게임을 하려고 합니다.
땅따먹기 게임의 땅(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 answer
[[1,2,3,5],[5,6,7,8],[4,3,2,1]] 16
입출력 예 설명
입출력 예 #1
문제의 예시와 같습니다.
풀이
( 이클립스로 재코딩하였습니다. )
import java.io.IOException;
import java.util.Scanner;
public class javatest {
public static void main(String[] args) throws IOException{
/*
< 규칙 >
1. 각 행 4칸 중 한 칸만 밟으면서 내려와 함
2. 한 행씩 내려올 때 같은 열을 연속해서 밟을 수 없음
*/
int[][] arr; // 입력받은 2차원 배열 형태
String str = ""; // 입력받은 문자열 형태
String[] strArr; // 입력받은 String 배열 형태
int x = 0; // 행 값
int num = 0; // String배열 인덱스
int noIndex = 0; // 2차원 배열에서 규칙으로 인해 선택 할 수 없는 인덱스
int savaIndex = 0;
int result = 0; // 결과
int max = 0; // 변수
Scanner scan = new Scanner(System.in);
str = scan.nextLine(); // 입력 받기
// 불필요한 문자 제거
str = str.replace("[", "");
str = str.replace("]", "");
strArr = str.split(","); // ,를 구분자로 String 배열에 담음
x = strArr.length / 4; // 행 값 구하기
arr = new int[x][4]; // arr 초기화
// 2차원 배열 arr에 값 할당
for(int i=0; i<x; i++) {
for(int j=0; j<4; j++) {
arr[i][j] = Integer.parseInt(strArr[num]);
num++;
}
}
// 결과 구하기
for(int i=0; i<x; i++) {
noIndex = savaIndex;
max = 0;
for(int j=0; j<4; j++) {
if(i==0) {
if(max < arr[i][j]) {
max = arr[i][j];
savaIndex = j;
}
}else {
if(max < arr[i][j]) {
if(j != noIndex) {
max = arr[i][j];
savaIndex = j;
}
}
}
}
result += max;
}
// 출력
System.out.println(result);
}
}
결과
'코딩 문제 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 실력체크 - 레벨 2 - 6번째 (0) | 2021.02.13 |
---|---|
프로그래머스 - 실력체크 - 레벨 2 - 5번째 (0) | 2021.02.13 |
프로그래머스 - 실력체크 - 레벨 2 - 3번째 (0) | 2021.02.13 |
프로그래머스 - 실력체크 - 레벨 2 - 2번째 (0) | 2021.02.08 |
프로그래머스 - 실력체크 - 레벨 2 - 1번째 (0) | 2021.02.08 |