← 실전 문제

한 칸을 무료로 지나는 경로

C++완성형

왼쪽 위에서 오른쪽 아래까지 오른쪽 또는 아래로 한 칸씩 이동해요. 방문한 모든 칸의 비용을 더해요. 시작 칸과 도착 칸도 비용에 포함돼요.

한 경로에서 원하는 칸 하나의 비용을 0으로 만들 수 있는 무료권이 있어요. 무료권은 최대 한 번 사용하며 시작·도착에도 사용할 수 있어요. int solution(vector<vector<int>> costs)를 작성해 낼 수 있는 최소 총비용을 반환해 주세요.

행·열은 각각 16, 모든 행 길이는 같고 칸 비용은 0100인 정수예요. 벽이나 빈 배열은 없어요. 최소 경로가 여러 개면 비용만 반환해요. 반환형은 int예요.

예시 1: costs = {{5, 1}, {2, 4}} → 5. 오른쪽→아래 경로의 비용 5+1+4에서 시작 칸 5를 무료로 하면 5예요.

예시 2: costs = {{8, 3, 6}} → 9. 유일한 경로의 합 17에서 8을 무료로 해요.

실행 입력은 R C, 다음 R줄의 C 개 비용이에요. 아래 하네스가 매개변수를 구성하므로 solution만 작성해요.

예시 입력

2 2
5 1
2 4

예상 결과

5

예시 입력

1 3
8 3 6

예상 결과

9
핵심 개념
  • dp-2d: 좌표와 추가 상태에 따른 의존 관계를 읽어요.
  • array-2d: 행·열과 이동 가능한 칸을 구분해요.
  • conditionals: 포함·제외 경계와 상태별 분기를 적용해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기