jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 리액트 프로젝트 디버깅하기
  • 계수정렬 자바스크립트
  • 덧칠하기 javascript
  • 병합정렬 자바스크립트
  • 리코쳇 로봇 javascript
  • 백준 17406 nodeJS
  • 1753 최단경로 javascript
  • 억억단을 외우자 javascript
  • 외벽 점검 javascript
  • 자바스크립트 이벤트 위임
  • 자바스크립트 배열의 특수함
  • javascript use strict
  • 자바스크립트 모듈 시스템
  • 자바스크립트 커링
  • fetch 취소하기
  • 퀵정렬 자바스크립트
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • JavaScript
  • 가사 검색 자바스크립트
  • safari invalid date error
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 자바스크립트 채팅방 스크롤
  • 대충만든자판 javascript
  • 자바스크립트 sort는 왜 그모양일까
  • 13460 javascript nodejs
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 프로그래머스 숫자카드나누기 javascript
  • 25632 소수 부르기 게임
  • safari Date format NaN
  • 백준 자바스크립트 입력 템플릿

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

DS & Algorithm/programmers

[프로그래머스] 땅따먹기 - 자바스크립트

2021. 6. 18. 17:31

문제

 

코딩테스트 연습 - 땅따먹기

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

programmers.co.kr

 

풀이

처음에는 DFS로 접근했다.

 

N회까지 재귀를 돌면서, X행에서는 X-1행에서 선택하지 않은 열을 선택하여 더했다.
각각의 경우의 수로부터 N행까지 도달했을 때, 최댓값일 경우 최댓값을 갱신하도록 했다.

 

물론 주어진 행 N이 최대 100,000이기 때문에 재귀 호출로 인한 시간초과 이슈가 발생했다.

 

모든 경우의 수를 조회할 수 없다면, DP(동적 계획법)를 생각해봐야 한다.

 

풀이방법

 

DP답게 생각해보자.
land 행렬은 N x 4 크기이다.

 

각 행의 0,1,2,3 열에 도달하기까지 누적한 점수의 최댓값을 0,1,2,3열에 각각 저장해주자.

 

다음 작업을 1행부터 시작해서 N-1행까지 수행하면

0행부터 N-1행까지의 열 값은 각 행들의 열에 도달하기까지의 점수 최댓값이 기록된다.

 

코드로 보면 더 이해가 쉬울 듯 하다.

 

코드

function solution(land) {
  const N = land.length;

  for (let i = 1; i < N; i++) {
    for (let j = 0; j < 4; j++) {
      let max = Number.MIN_SAFE_INTEGER;
      for (let k = 0; k < 4; k++) {
        if (j === k) continue;
        max = Math.max(max, land[i - 1][k]);
      }
      land[i][j] += max;
    }
  }
  return Math.max(...land[N - 1]);
}

 

이와 같이 각 행에 있는 열 값에 열에 도달하기까지 최댓값을 기록해주면 빠르게 정답을 구할 수 있다.

저작자표시 (새창열림)

'DS & Algorithm > programmers' 카테고리의 다른 글

[프로그래머스] 괄호 변환 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 게임 맵 최단거리 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 다리를 지나는 트럭 - 자바스크립트  (0) 2021.04.19
[프로그래머스] 크레인 인형뽑기 게임 - 자바스크립트  (0) 2021.04.19
[프로그래머스] 위장 - 자바스크립트  (0) 2021.04.18
    'DS & Algorithm/programmers' 카테고리의 다른 글
    • [프로그래머스] 괄호 변환 - 자바스크립트
    • [프로그래머스] 게임 맵 최단거리 - 자바스크립트
    • [프로그래머스] 다리를 지나는 트럭 - 자바스크립트
    • [프로그래머스] 크레인 인형뽑기 게임 - 자바스크립트
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바