입력 데이터를 받아서 가공하는 부분도 new가 많아서 느리지만, 일단 processResult가 느립니다.
매 순간마다 모든 cell을 확인하시는데, 굳이 모든 cell을 매번 다 봐줄 필요는 없죠. 이전 상태와 뭔가 바뀐 게 있는 cell들만 확인하도록 알고리즘을 바꾸셔야 할겁니다. time complexity가 O(h*w) 이내가 되도록 하셨는데도 시간초과가 난다면 new를 많이 한 것이 원인일 수 있겠습니다.
배열로 바꾸는 것만으로도 상당히 속도를 올릴 수는 있지만 아마 그걸로는 통과가 안될거예요. 매 순간마다 지금 방식대로 모든 살아있는 셀을 본다면 processResult가 시간복잡도가 얼마나 될지 먼저 계산해보세요. 그리고 어떻게 해야 상태가 바뀐 셀만 볼 수 있을지 생각해보시고 이 경우에는 시간복잡도가 얼마나 되는지 계산해보세요.
fractize
박테리아 문제를 푸는데 시간 초과가 나옵니다.
평가에 사용되는 테스트 케이스를 한번 보고싶은 마음이 굴뚝같네요.
제가 만든 로직은 아래와 같습니다.
여기서 더 최적화 할 여지가 있는지 조언을 구하고 싶습니다.
두개의 버퍼를 마련합니다.
하나는 입력 버퍼
하나는 이전 버퍼입니다.
네개의 이웃에 대한 링크 포인터를 가지는 Cell이라는 구조체를
*문자가 있을때 마다 생성합니다.
입력 버퍼와 이전 버퍼를 비교해서
상하 좌우에 있는 이웃들과 Cell들을 연결짓습니다.
여기까지 하면 Cell들로 이루어진 Dish가 완성됩니다.
완성된 Dish에서
이웃이 2개가 아닌 Cell들을 죽입니다.
이것을 반복하면서 카운트를 셉니다.
이웃이 2개인 Cell들만 남으면 -1을 반환하고
Cell들이 모두 죽으면 카운트를 반환하고 종료합니다.
12년 전