17267번 - 상남자
문제풀때 다른분이 질문해둔거 풀면 답변도 달수있고 좋아서 그렇게 하는편입니다.
https://www.acmicpc.net/board/...
요분꺼 답변아직 안달렸고 그냥 단순 bfs 문제같아서 해봤는데요.
문제는 결국 여러번 틀린끝에 맞긴했는데 잘 이해가 안되서 질문드립니다.
결국 로직은 단순한 bfs로 범위넓히기입니다.
문제는 저 43~53번째 줄 인데요, (올린 코드가 맞는 코드)
43번줄 : 위로 막힌곳 만날때까지 쭉 넣음
45번줄 : 아래로 막힌곳 만날때까지 쭉 넣음
47번줄 : 좌측으로 현재 남은 좌측으로 갈 수 있는 수만큼 쭉 넣음(막힌곳 만날때까지)
49번줄 : 우측으로 현재 남은 우측으로 갈 수 있는 수만큼 쭉 넣음(막힌곳 만날때까지)
51~54번줄 : 쭉 넣지 않고 한칸씩 넣음.
---
로직적으로는 어차피 BFS문제라 달라질게 없을 것 같아 틀릴때마다 저 위의 구성을 달리해봤는데요,
결론적으로 통과한건 어떠한 지점에서 아래,위로는 넣을수 있을만큼 쭉 넣고 / 좌,우측으로는 한칸씩 넣는것.
이었습니다. 나머지 뭐 상하좌우로 1칸씩 넣거나(51~54번줄로), 전부 쭉 넣거나(43~49번줄로) 하는건 93%쯤 전부 틀렸다고 나왔구요.
이게 잘 이해가 안되는데, 아래위로 쭉 넣으나 아래위로 한칸씩 넣으나 답이 다르게 뜰 가능성이 있을까요?
물론 아래 위로는 얼마든지 이동 가능하다 했으니 개념적으론 쭉 넣는게 맞는것도 같지만,
어차피 BFS이고 벽 만날때까지 이동할텐데 한칸씩 넣으나 쭉 넣으나 뭐가 문제인가 싶기도 합니다 ㅠㅠ
순회체크와 맵 자체를 동일하게 하나로 쓰는게 문제될것같지도 않구요.
어차피 위아래로 쭉 넣으나, 위아래로 한칸씩 넣으나 위아래로 한칸 간 녀석이 그 위아래로 한칸씩 넣다보면 결국 위아래로 쭉 갈텐데!!
좌,우측 갈 수 있는 남은 거리수는 별도의 클래스로 가지고 있으니 그게 달라질것같지도 않고..
제가 개념을 잘못알고 있나요?! 이해가 안됩니다. 도와주십쇼.
상하좌우로 1칸씩 이동하는 코드의 반례입니다.
상하좌우로 최대한 이동하는 코드의 반례입니다.
위아래로 쭉갈때
211111111111111111111111111111111111111111
한칸씩갈때
201111111111111011111111111111111111111111
아;; 이미 왼쪽으로 한칸 간 녀석이 먼저 저기로 와버려서 저기 하나가 0이 되는 군요 ㄷㄷ
사랑합니다.
와.. 이런 반례 어찌 찾으시는겁니까 ㄷㄷ
멋지네요..
잠시 멈추고 개념 확실히 잡고 가야겠습니다. 감사해요!
상하 최대한, 좌우 한칸씩21111111111111111111111111111111111111상화좌우 최대한20111111111111111111111101111111111111
ㅗㅜㅑ.. 반례가 이렇게 멋져보일수가..
@rubix
@nahwasa
감사합니다. 저런 반례는 생각도 못 했었네요. 아직 부족한가 봅니다.
어쩐지 deque를 쓰니 통과가 되더군요.
댓글을 작성하려면 로그인해야 합니다.
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이고 벽 만날때까지 이동할텐데 한칸씩 넣으나 쭉 넣으나 뭐가 문제인가 싶기도 합니다 ㅠㅠ
순회체크와 맵 자체를 동일하게 하나로 쓰는게 문제될것같지도 않구요.
어차피 위아래로 쭉 넣으나, 위아래로 한칸씩 넣으나 위아래로 한칸 간 녀석이 그 위아래로 한칸씩 넣다보면 결국 위아래로 쭉 갈텐데!!
좌,우측 갈 수 있는 남은 거리수는 별도의 클래스로 가지고 있으니 그게 달라질것같지도 않고..
---
제가 개념을 잘못알고 있나요?! 이해가 안됩니다. 도와주십쇼.