배너 이미지

백준 1557: 도로의 개수(Java)

2025. 6. 11. 22:05·알고리즘

✅ 문제 요약

  • N×M 격자 도시에 도로가 건설됨.
  • 도로는 격자의 가로선 또는 세로선에 해당.
  • 일부 도로는 공사 중이므로 통행 불가.
  • (0,0)에서 (N,M)까지 이동하는 경로의 수를 구하라.
  • 오른쪽 또는 아래쪽 방향으로만 이동 가능.

🔍 알고리즘 설계

  • DP[i][j] = (0,0)부터 (i,j)까지 가는 경로 수
  • 인접한 두 좌표 사이의 도로가 막혀있다면 그 방향으로 이동 불가.
  • 공사 중 도로는 (i1, j1, i2, j2)로 주어짐 → Set으로 관리.
import java.util.*;

public class Main {
    static int N, M;
    static long[][] dp;
    static Set<String> block = new HashSet<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        M = sc.nextInt();
        N = sc.nextInt();
        int K = sc.nextInt();
        dp = new long[N + 1][M + 1];

        for (int k = 0; k < K; k++) {
            int i1 = sc.nextInt();
            int j1 = sc.nextInt();
            int i2 = sc.nextInt();
            int j2 = sc.nextInt();
            block.add(i1 + " " + j1 + " " + i2 + " " + j2);
            block.add(i2 + " " + j2 + " " + i1 + " " + j1);
        }

        dp[0][0] = 1;
        for (int i = 0; i <= N; i++) {
            for (int j = 0; j <= M; j++) {
                if (i > 0 && !block.contains((i - 1) + " " + j + " " + i + " " + j)) {
                    dp[i][j] += dp[i - 1][j];
                }
                if (j > 0 && !block.contains(i + " " + (j - 1) + " " + i + " " + j)) {
                    dp[i][j] += dp[i][j - 1];
                }
            }
        }
        System.out.println(dp[N][M]);
    }
}

📌 핵심 포인트

  • DP를 활용하여 각 좌표까지의 경로 수를 누적
  • 공사 중 도로는 Set<String>으로 관리하여 양방향 차단
  • 좌표 인덱스를 (i, j) 형식으로 명확하게 관리

⏱ 시간 복잡도 분석

  • 시간 복잡도: O(N × M)
  • 공간 복잡도: O(N × M)
  • N, M ≤ 100 이므로 충분히 처리 가능

'알고리즘' 카테고리의 다른 글

백준 2615: 소형기관차(Java)  (0) 2025.06.29
백준 2306: 유전자(Java)  (1) 2025.06.12
백준 2248 - 이진수 찾기(Java)  (1) 2025.06.07
백준 10800번: 컬러볼 (Java)  (1) 2025.06.04
백준 2294: 동전2(Java)  (1) 2025.06.02
'알고리즘' 카테고리의 다른 글
  • 백준 2615: 소형기관차(Java)
  • 백준 2306: 유전자(Java)
  • 백준 2248 - 이진수 찾기(Java)
  • 백준 10800번: 컬러볼 (Java)
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • 개발자 (77)
      • n8n (2)
      • CS공부 (46)
        • Java & Spring (15)
        • 인프라 (7)
        • 운영체제 & 시스템 (9)
        • 기타 CS지식 (7)
        • 네트워크 (6)
        • 데이터베이스 (2)
      • 알고리즘 (16)
      • 프로젝트 (8)
        • 감정&금융챗봇 (8)
      • 리팩토링 (5)
        • horong (5)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상단으로

티스토리툴바