inblog logo
|
LHS's Study Space
    알고리즘문제풀기프로그래머스

    [프로그래머스] 등굣길(42898)

    lhs's avatar
    lhs
    Nov 30, 2024
    [프로그래머스] 등굣길(42898)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/42898
     

    1. 문제 풀이 아이디어

    • 동적 프로그래밍(dp)을 사용해 문제를 해결할 수 있다.
    • 문제에서 1000000007로 나눈 나머지를 반환하라고 명시되어 있으므로 이를 무시하면 효율성 테스트를 통과하지 못한다. 따라서 문제를 꼼꼼히 읽고 조건을 정확히 반영해야 한다.

    2. 나의 정답 코드

    class Solution { public int solution(int m, int n, int[][] puddles) { boolean[][] map = new boolean[n + 1][m + 1]; int[][] dist = new int[n + 1][m + 1]; for (int[] puddle : puddles) { map[puddle[1]][puddle[0]] = true; } dist[0][1] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (map[i][j]) continue; dist[i][j] = dist[i - 1][j] + dist[i][j - 1]; dist[i][j] %= 1000000007; } } return dist[n][m]; } }

    3. 정리

    • dp 구현을 위해 2차원 배열의 크기를 기존보다 1씩 증가시켜 정의한다.
    • 웅덩이 위치를 저장하기 위해 boolean 타입의 2차원 배열을 사용하며, 웅덩이가 있는 좌표는 true로 설정한다.
    • 최단 경로의 경우의 수를 저장하기 위해 int 타입의 2차원 배열을 활용한다.
    • for 문을 사용해 각각의 좌표에서 위쪽(i-1)과 왼쪽(j-1) 위치의 경우의 수를 더한 값을 dist[i][j]에 저장한다.
    • 이후 1000000007로 나눈 나머지를 저장해 문제의 조건을 만족시킨다.
    • 최종적으로 dist[n][m] 값을 반환해 문제를 해결한다.
    Share article

    LHS's Study Space

    RSS·Powered by Inblog