nahwasa   4년 전

문제풀때 다른분이 질문해둔거 풀면 답변도 달수있고 좋아서 그렇게 하는편입니다.

https://www.acmicpc.net/board/...

요분꺼 답변아직 안달렸고 그냥 단순 bfs 문제같아서 해봤는데요.

문제는 결국 여러번 틀린끝에 맞긴했는데 잘 이해가 안되서 질문드립니다.

결국 로직은 단순한 bfs로 범위넓히기입니다.

문제는 저 43~53번째 줄 인데요, (올린 코드가 맞는 코드)

43번줄 : 위로 막힌곳 만날때까지 쭉 넣음

45번줄 :  아래로 막힌곳 만날때까지 쭉 넣음

47번줄 : 좌측으로 현재 남은 좌측으로 갈 수 있는 수만큼 쭉 넣음(막힌곳 만날때까지)

49번줄 : 우측으로 현재 남은 우측으로 갈 수 있는 수만큼 쭉 넣음(막힌곳 만날때까지)

51~54번줄 : 쭉 넣지 않고 한칸씩 넣음.

---

로직적으로는 어차피 BFS문제라 달라질게 없을 것 같아 틀릴때마다 저 위의 구성을 달리해봤는데요,

결론적으로 통과한건 어떠한 지점에서 아래,위로는 넣을수 있을만큼 쭉 넣고 / 좌,우측으로는 한칸씩 넣는것.

이었습니다. 나머지 뭐 상하좌우로 1칸씩 넣거나(51~54번줄로), 전부 쭉 넣거나(43~49번줄로) 하는건 93%쯤 전부 틀렸다고 나왔구요.

---

이게 잘 이해가 안되는데, 아래위로 쭉 넣으나 아래위로 한칸씩 넣으나 답이 다르게 뜰 가능성이 있을까요?

물론 아래 위로는 얼마든지 이동 가능하다 했으니 개념적으론 쭉 넣는게 맞는것도 같지만,

어차피 BFS이고 벽 만날때까지 이동할텐데 한칸씩 넣으나 쭉 넣으나 뭐가 문제인가 싶기도 합니다 ㅠㅠ

순회체크와 맵 자체를 동일하게 하나로 쓰는게 문제될것같지도 않구요.

어차피 위아래로 쭉 넣으나, 위아래로 한칸씩 넣으나 위아래로 한칸 간 녀석이 그 위아래로 한칸씩 넣다보면 결국 위아래로 쭉 갈텐데!!

좌,우측 갈 수 있는 남은 거리수는 별도의 클래스로 가지고 있으니 그게 달라질것같지도 않고..

---

제가 개념을 잘못알고 있나요?! 이해가 안됩니다. 도와주십쇼.

rubix   4년 전

상하좌우로 1칸씩 이동하는 코드의 반례입니다.

rubix   4년 전

상하좌우로 최대한 이동하는 코드의 반례입니다.

nahwasa   4년 전

위아래로 쭉갈때

21
11111
11111
11111
11111
11111
11111
11111
11111

한칸씩갈때

20
11111
11111
11101
11111
11111
11111
11111
11111

아;; 이미 왼쪽으로 한칸 간 녀석이 먼저 저기로 와버려서 저기 하나가 0이 되는 군요 ㄷㄷ

사랑합니다.

nahwasa   4년 전

와.. 이런 반례 어찌 찾으시는겁니까 ㄷㄷ

멋지네요..

잠시 멈추고 개념 확실히 잡고 가야겠습니다. 감사해요!

nahwasa   4년 전

상하 최대한, 좌우 한칸씩
21
111111
111111
111111
111111
111111
111111
상화좌우 최대한
20
111111
111111
111111
111101
111111
111111

ㅗㅜㅑ.. 반례가 이렇게 멋져보일수가..

park780172   4년 전

@rubix

@nahwasa

감사합니다. 저런 반례는 생각도 못 했었네요. 아직 부족한가 봅니다.

어쩐지 deque를 쓰니 통과가 되더군요.

댓글을 작성하려면 로그인해야 합니다.