Joonas' Note

Joonas' Note

BOJ 2096 - 내려가기 본문

알고리즘/문제 풀이

BOJ 2096 - 내려가기

2019. 3. 13. 20:45 joonas

    링크: https://www.acmicpc.net/problem/2096

    문제

    어떤 칸을 선택하면 선택 가능한 다음 칸이 정해지는 점에서 9465번 - 스티커와 굉장히 유사합니다. 사실 동일한 풀이로 해결되지만 다른 점이 있습니다.

    이 문제는 메모리의 제한이 4MB로 엄청 작다는 겁니다.

    적은 메모리 제한때문에 스티커 문제처럼 dp[3][N] 과 같은 배열을 선언할 수도 없고 재귀 함수까지도 염려해야하는 상황입니다. 그럼 어떻게 해결해야할까요?

    풀이

    어떤 r번째 줄에서 어떤 칸을 선택한다면, 이는 다음 줄인 r+1번째 줄에 영향이 갑니다. 

    어떤 칸을 선택할 때, 항상 2개의 줄만 확인하면 된다는 점으로 메모리를 줄일 수 있습니다.
    왜냐하면 1번째 줄은 2번째 줄에 영향을 주고 2번째 줄은 3번째 줄에 영향을 주지만, 이미 이 시점에서 1번째 줄에서 선택한 결과들은 2번째 줄에 포함되어 있기 때문입니다.

    이런 점을 활용한다면 배열의 크기를 dp[N][3] 에서 dp[2][3] 으로 줄일 수 있습니다. 마치 좌->우, 우->좌가 반복되는 형식처럼 생각하시면 편합니다.

    코드


    '알고리즘 > 문제 풀이' 카테고리의 다른 글

    프로그래머스 - 나머지 한 점  (0) 2019.03.16
    BOJ 1405 - 미친 로봇  (0) 2019.03.14
    BOJ 16964 - DFS 스페셜 저지  (0) 2019.03.12
    BOJ 11447 - Colby’s Costly Collectibles  (0) 2019.03.11
    BOJ 1976 - 여행 가자  (0) 2019.03.08
    Comments