totok682   4년 전

사실 처음에 시도했던 방법은

도킹 돼있는지 판별하기위한 bool 형 배열을 선언해놓고 

gi 를 입력받아 거꾸로 반복문을 돌면서 해결하고자 했으나 시간초과가 떠서 인터넷을 검색해보았습니다.


두번째로 시도한 방법은

유니온-파인드 카테고리에 있기도하고 인터넷에서는 유니온 파인드 구조를 통해 해결하는 것으로 보여서

아래와 같이 코드를 짰는데 이 마저도 시간 초과가 발생합니다.


저는 시간 초과가 뜨는게 당연하다고 생각하는게 두번째 방법에서 find 함수의 반복횟수나 bool 형 배열을 두고 반복문을 두는 것이랑 같다고 생각합니다. 오히려 첫 번째 방법이 빠르다고 생각하는데요.

그래서 시간을 줄이기 위해,


세번째로 시도한 방법은

아래 코드와 같이 bool 형 배열과 이분 탐색 알고리즘을 사용한 방법이었는데,

이번엔 틀리다고 나오네요.. 어디가 잘못된건지 도와주실 수 있으실까요 ㅠㅠ


herdson   4년 전

실제 풀이를 보면 질문자님이 언급하신 첫번째 방법과 두번째 방법 둘다 존재합니다.

첫번째는 Clever counting이라고 불리던데

http://mmhs.ca/ccc/2015/2015s3MatthewLee.txt

다음 링크를 참조하면 될 것 같습니다.


유니온 파인드로 해결하려고 하실 경우 Union by rank을 하지 않아야 시간초과가 뜨지 않습니다.
유니온 파인드 구조에 대한 근본적인 이해가 필요한 부분입니다.

세번째는 솔직히 이분탐색이 먹힐 수 있을 것 같지는 않습니다.

totok682   4년 전

herdson


union by rank 가 아닌 경로 압축을 통해 해결했지만

도움이 됐습니다 ^ㅡ^ 감사합니다 

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