티스토리 뷰
문제 설명
땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(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 이하의 자연수
입출력 예
문제 풀이 과정
문제를 읽자마자 이 문제는 각 열마다 조합해서 가장 값이 큰 경우를 찾으면 되는구나 하고 코드 작성 했는데 시간 초과가 났다.
이 문제는 조합이 아닌 dp 문제 이다.
dp 로 각열의 합을 구할때 이전 값에서 가장 큰 값을 가져와 현재 자신의 값을 더해서 마지막에 가장 큰 값을 구하는 문제 이다.
참고로 아래 코드는 처음에 조합으로 코드 작성 한 것이다.
코드의 시작은 1 행부터 시작한다.
1행의 1열인 5인 경우를 보면 0행에서 자기 자신과 열이 같지 않으면서 가장 큰수는 5가 된다.
이 값을 자기 자신과 더해서 값을 누적한다.
2번째 행에서 첫번째 값인 4일때는 1번째 행에서 자기 자신과 같은 열이 아니면서 가장 큰 값은 12며, 이값을 더하면 16이 된다.
마지막 행까지 계산이 끝났다면, 마지막 행에서 가장 큰 값을 찾아서 return 한다.
전체 코드
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 무인도 여행 (JAVA) (0) | 2023.02.10 |
---|---|
프로그래머스 - 파일명 정렬 (JAVA) (0) | 2023.02.10 |
프로그래머스 - 메뉴 리뉴얼 (JAVA) (0) | 2023.01.22 |
프로그래머스 - 방문 길이 (JAVA) (0) | 2023.01.22 |
프로그래머스 - 연속 부분 수열 합의 수(JAVA) (0) | 2023.01.21 |
- Total
- Today
- Yesterday
- 취업준비
- 제로베이스 백엔드 스쿨
- 백준
- 백엔드 개발자 취업 준비
- java
- 코딩테스트 준비
- 알고리즘공부
- 개발자 취업 준비
- 제로베이스 백준 장학금
- 프로그래머스 카카오
- 알고리즘 공부
- 코딩테스트
- 코테준비
- 코테공부
- 코테 준비
- 자바
- 코딩테스트공부
- 알고리즘
- 백엔드 개발자
- 프로그래머스
- 취업 준비
- 취준
- 코딩테스트 공부
- 기술 면접 준비
- 자바공부
- 개발자 면접 준비
- 개발자 취준
- 백엔드 개발자 기술 면접 준비
- 주니어 개발자 취업 준비
- 프로그래머스 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |