포스트

Exception: 위치를 기록하는 동안 액세스 위반이 발생했습니다. (0 < nx ≤ n)

본 글은 제 개인적인 공부를 위해 작성한 글입니다. 틀린 내용이 있다면 언제든지 피드백을 주시면 감사하겠습니다. 참고로만 활용해주시길 바랍니다.

문제점


image

BFS 문제를 푸는 중에 나는 아래와 같이 C++ 코드를 작성했다.

1
if (0 < ny <= n and 0 < nx <= m and not visit[ny][nx] and tomato[ny][nx] == 0)

파이썬에서는 당연하게도 0 < ny < n 와 같이 조건을 사용할 수 있었지만, C++은 조금 다른 것 같다.

연산자 우선 순위(L → R)에 의해 0 < ny가 먼저 연산되고 나온 결과 bool 값을 가지고 bool <= n 을 계산하는 것이다.

내가 의도한 바로는 ny가 0보다 작다면 조건에 걸리지 않아야 한다.

하지만 -2를 넣어보자.

  1. 0 < -2 → false
  2. false <= n → true (문제에서 n > 2 이다.)

즉, true가 나오게 된다.


해결


아래와 같이 작성하자.

1
if (0 < ny and ny <= n and 0 < nx and nx <= m and not visit[ny][nx] and tomato[ny][nx] == 0)



참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.