[Programmers]땅따먹기/JS

2024. 2. 1. 00:07·Algorithm/Programmers

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/12913

 

프로그래머스

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

programmers.co.kr


접근방법

같은 열만 안밟으면 되는 문제인줄 알고 그렇게 풀었다가 테스트가 다 실패했다..

당황해서 문제 다시 정독해보니

얻을 수 있는 점수의 최대값을 return

알고보니 DP 문제였다.

문제를 보고 DP 문제인지 파악하는 것부터 어려운데.. ㅠㅅㅠ

DP로 푸니까 뚝딱 풀리는 문제였다!

 

처음코드

== 다 실패한 코드ㅋ

 

function solution(land) {
  var answer = 0;

  let prev = Math.max(land[0][0], land[0][1], land[0][2], land[0][3]);
  let prevIndex = land[0].indexOf(prev);
  answer += prev;

  for (let i = 1; i < land.length; i++) {
    let max = Math.max(land[i][0], land[i][1], land[i][2], land[i][3]);
    let maxIndex = land[i].indexOf(max);

    if (prevIndex == maxIndex) {
      land[i].splice(maxIndex, 1);
      max = Math.max(land[i][0], land[i][1], land[i][2]);
      maxIndex = land[i].indexOf(max);
    }
    answer += max;
  }
  return answer;
}

위의 방식으로 풀면 최대값을 return 할 수 없다.

그저 주어진 문제만 해결될뿐..ㅠ

[[1, 2, 3, 4],

[1, 2, 3, 100]]

위의 코드를 돌리면 4와 3을 선택하기 때문데 7이 return 된다.

문제에서는 최대값을 원하기 때문에 103이 return 되어야 정답이다.

정답코드

function solution(land) {
   var answer = 0;

    for(let i=1;i<land.length;i++){
        land[i][0]+=Math.max(land[i-1][1],land[i-1][2],land[i-1][3])
        land[i][1]+=Math.max(land[i-1][0],land[i-1][2],land[i-1][3])
        land[i][2]+=Math.max(land[i-1][0],land[i-1][1],land[i-1][3])
        land[i][3]+=Math.max(land[i-1][0],land[i-1][1],land[i-1][2])
    }
    let score=land[land.length-1]
    answer=Math.max(...score)
    
  return answer;
}

 

 

DP 방식으로 푸니까 해결됐따.

land[i][0]에는 land[i-1] 중 열이 0인 것을 제외하고 가장 큰 값을 더해서 저장

land[i][1]에는 land[i-1] 중 열이 1인 것을 제외하고 가장 큰 값을 더해서 저장

...

이렇게 4번 하면 land[land.length-1]에는 처음에 각 열을 선택했을 때 구할 수 있는 최대값들이 저장되어 있다.

이 중에서 가장 큰 값을 return 해주면 해결!

'Algorithm > Programmers' 카테고리의 다른 글

[Programmers]혼자 놀기의 달인/JS  (0) 2024.02.19
[Programmers]삼각 달팽이/JS  (1) 2024.02.01
[Programmers]가장 큰 정사각형 찾기/JS  (1) 2024.01.28
[Programmers]게임 맵 최단거리/JS  (1) 2024.01.23
[Programmers]구명보트/JS  (2) 2024.01.22
'Algorithm/Programmers' 카테고리의 다른 글
  • [Programmers]혼자 놀기의 달인/JS
  • [Programmers]삼각 달팽이/JS
  • [Programmers]가장 큰 정사각형 찾기/JS
  • [Programmers]게임 맵 최단거리/JS
>동구리<
>동구리<
  • >동구리<
    데굴데굴 굴러가는 히동구리
    >동구리<
  • 전체
    오늘
    어제
    • 분류 전체보기
      • WEB
      • HTML,CSS,JS
      • React
      • 개발
      • Git
      • 이것저것
      • Algorithm
        • Programmers
        • Study
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    배열 생성
    JITC
    리액트 #React #아토믹디자인 #아토믹디자인패턴
    ouline
    border vs outline
    이벤트 전파
    http1
    리액트 #React #생명주기 #Lifecycle #훅 #Hook
    adaptive jitc
    js 동작원리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
>동구리<
[Programmers]땅따먹기/JS
상단으로

티스토리툴바