티스토리 뷰

알고리즘

백준 - 공주님을 구해라

koyuchang 2021. 6. 7. 21:32

문제 출처: https://www.acmicpc.net/problem/17836

 

17836번: 공주님을 구해라!

용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지고 있는

www.acmicpc.net

 

3차원 배열을 통해 검을 먹었을 때와 아닐 때를 구분해야 한다.

최단시간이고 N, M, T의 범위가 크므로 BFS탐색을 선택.

 

매번 이동할 때마다 검을 가지고 있는지 없는지를 확인

  1. 다음 좌표가 벽인 경우
    1. 검을 가지고 있는 경우 → 3차원 배열 체크 후 이동
    2. 검을 가지고 있지 않는 경우 → 이동 불가
  2. 다음 좌표가 길(==0) 일 경우
    1. 방문 체크하고 Queue에 넣는다.
  3. 다음 좌표가 '그람'일 경우(==2)
    1. wall을 1로 해주고, 방문체크 및 Queue에 넣는다.

 

클래스에서는 r, c, isSword, wall 이렇게 4개의 변수를 갖는다.

좌표가 2인 곳에 도착하면 isSword는 true가 되고 벽을 한번 부수고 지나가면 false로 변환.

벽을 부수면 wall이 1 아니면 0

 

→위와 같은 방식으로 진행할 경우 문제 지시에 어긋난다.(필자가 문제를 제대로 파악.. 아니 읽기 못했다..)

 

위의 실수를 깨닫고 그러면 간단히 전역 변수로 하면 해결되지 않을까??라고 생각했다.

 

 

위 사진처럼 isSword 변수를 두고 2인 지점에 도달하면 false였던 값을 true로 변환해주었다. 하지만 이것 또한 잘못된 판단이었다..

 

만약 한 곳에서 먼저 그람을 만나 벽을 뚫을 수 있게 된다면, 아직 그람에 도달하지 못한(곧 도달할) 좌표에서는 그람에 도달하지 않고도 벽을 뚫는 것이 가능해진다.

 

 

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

백준 - Z  (0) 2021.06.16
백준 - ⚾  (0) 2021.06.10
백준 - 8진수 2진수  (0) 2021.06.07
프로그래머스 - 게임 맵 최단거리  (0) 2021.06.06
백준 - 연구소2  (0) 2021.06.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함