일단 저랑 똑같이 문제 이해를 잘못하신거 같아요 ㅋㅋㅋ
53번째줄 보니까 6이하인 것들만 어떻게 하시는데.. 그게 아니라 0부터 100까지 다 해봐야 하는 문제거든요.
아무튼 그래서 질문 올라온거 보고 풀어봤는데,
저도 자꾸 틀렸다고 뜨길래 봤더니 인접한 영역이 false인거.. 그니까
지금 예제에선 왼쪽 아래에 7개 붙어있는 흰색깔 영역들 중에 양 끝에 있는 2개 영역빼서 5개라고 생각하고 계신거 아닌가요??
근데 그게 아니라 높이를 0부터 100까지 다 해봤을 때
흰색 영역이 인접해 있는거를 전부 한덩어리로 생각하고
그 덩어리의 개수가 최대가 될때, 그 최대값을 출력하는 게 문제에요.
만약 이런 내용에 해당된게 아니라면 아래 글은 무시해주세요~
======================================아래는 위와 같이 문제를 착각했을 때 풀이 법==========================================
일단 그래도 생각하신 인접한 애들을 푸는 방법을 설명해보자면,
bfs돌려서 일단 해당 높이보다 작은애들을 전부 체크해주고
그럼 체크 안된애들만 dfs를 돌려요.
dfs탐색이 한번 들어갈때마다 plus++; 해주시고,
인접한 정점중 뚫려있는 곳이 1개 이하이면 minus++;해줘서
나중에 dfs 다 돌고 나오면 mx = max(mx, plus-minus); 해서 저장해주면 돼요.
물론 이게 문제가 아니니까.. (완전 엉뚱한 문제를 풀었죠...) ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
이 문제는 그냥 덩어리를 세주세요. 이건 아실거 같아서 다시 물어보시면 글 남겨 드릴게요.
- //주의 !! 아래 코드는 이 문제의 정답이 아닙니다.
leeyh2006 6년 전
높이가 6이라고 가정하면 6이하인 안전 영역은 찾았는데 (예 {0,1},{2,1},{3,0},{4,0},{4,1} ,{4,4} )
여기서 어떻게 갯수를 카운트 해야 될 지 도저히 방법이 떠오르지가 않아서요
안전 영역을 true라고 놓고 인접한 부분이 모두다 false 일 경우 큐에 넣는 식으로해서 다 찾으면 깊이를 카운트 하고 싶은데 .. 조건을 어떻게 놔야 될지 모르겠네요 도와주시면 감사합니다 !