포럼
문제 USACO0203

베시의 꿈

설명

농부 존의 부엌에서 과일을 너무 많이 먹은 소 베시는 아주 이상한 꿈을 꾸고 있다! 가장 최근 꿈에서 베시는 \(N \times M\) 격자 타일 모양의 미로(\(1 \le N, M \le 1,000\))에 갇혀 있다. 베시는 왼쪽 위 타일에서 출발하여 오른쪽 아래 타일에 도착하고 싶다. 어떤 타일 위에 서 있을 때, 베시는 동서남북 네 방향의 인접한 타일로 이동할 수 있다.

그런데 잠깐! 각 타일에는 색이 있고, 색마다 다른 성질이 있다! 생각만 해도 베시는 머리가 아프다.

  • 타일이 빨간색이면 지나갈 수 없다.
  • 타일이 분홍색이면 평범하게 걸어갈 수 있다.
  • 타일이 주황색이면 평범하게 걸어갈 수 있지만, 베시에게서 오렌지 냄새가 나게 된다.
  • 타일이 파란색이면 피라냐가 있어서 베시에게서 오렌지 냄새가 날 때에만 통과시켜 준다.
  • 타일이 보라색이면 베시는 그 방향의 다음 타일로 미끄러진다(그 타일을 지나갈 수 없는 경우는 제외). 다음 타일도 보라색이면, 베시는 보라색이 아닌 타일에 도착하거나 지나갈 수 없는 타일에 부딪힐 때까지 계속 미끄러진다. 타일을 미끄러져 지나가는 것도 한 번의 이동으로 센다. 보라색 타일은 베시의 냄새도 없애 버린다.

(보라색 타일이 헷갈린다면, 예제가 그 사용법을 보여 줄 것이다.)

베시가 왼쪽 위에서 오른쪽 아래까지 최소한의 이동 횟수로 갈 수 있도록 도와주자.

Problem credits: Nathan Pinsker, inspired by the game "Undertale"

제약

Problem credits: Nathan Pinsker, inspired by the game "Undertale".

입력 형식

첫째 줄에 미로의 행과 열의 수를 나타내는 두 정수 \(N\)\(M\)이 주어진다.

다음 \(N\)개의 줄에는 각각 \(M\)개의 정수가 주어지며, 미로를 나타낸다:

  • 정수 '0'은 빨간색 타일
  • 정수 '1'은 분홍색 타일
  • 정수 '2'는 주황색 타일
  • 정수 '3'은 파란색 타일
  • 정수 '4'는 보라색 타일

왼쪽 위와 오른쪽 아래의 정수는 항상 '1'이다.

출력 형식

베시가 미로를 건너는 데 필요한 최소 이동 횟수를 하나의 정수로 출력한다. 불가능하면 -1을 출력한다.

Standard input / output
This problem is judged over standard input/output. The original contest used named files — if you prefer the classic interface, tick “File I/O” on the submit form and read/write these files instead:
입력을 읽을 파일 dream.in · 출력을 쓸 파일 dream.out
예제 1
입력
4 4
1 0 2 1
1 1 4 1
1 0 4 0
1 3 1 1
출력
10
설명

In this example, Bessie walks one square down and two squares to the right (and
then slides one more square to the right). She walks one square up, one square
left, and one square down (sliding two more squares down) and finishes by
walking one more square right. This is a total of 10 moves (DRRRULDDDR).

문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2015-2016 > December > Gold

태그

평가 및 의견

Bessie's Dream

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Bessie's Dream

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
파일 입출력 (dream.in / dream.out — classic USACO interface; off = stdin/stdout)
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8