Week9 서영탁 SWEA 5653 줄기세포배양 풀이 #151
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
풀이
세포에 대한 정보를 클래스로 만들어 유지했습니다.
초기 생명력(
initLife)과 남은 생명력(restLife)을 가지는데,초기 생명력은 변하지 않는 값으로 상태가 변하거나 번식할 때 사용하는 값이고,
남은 생명력은 시간이 지남에 따라 감소되는 값으로 비활성 상태에서 0이 되면 활성 상태로 변하고, 활성 상태에서 0이 되면 세포가 죽습니다.
문제에서 배양 용기의 크기는 무한하다고 가정했지만, 입력으로 주어지는 시간인 k가 최대 300으로 배양 용기의 크기는 최대 350 * 350입니다.
저는 넉넉잡아 500 * 500으로 설정하고, 중점 좌표를 (200, 200)으로 설정하고 문제를 풀었습니다.
bfs를 사용하여 세포들을 번식시켰습니다.
우선 비활성 상태의 세포에 대해서는 남은 생명력이 1보다 크다면 남은 생명력만 감소시켜주었고,
남은 생명력이 1이라면 다음 턴에 활성 상태로 변경될 것이니, 변경하여 큐에 넣었습니다.
활성 상태의 세포는 바로 번식을 했습니다.
우선순위를 시간순서 -> 초기 생명력이 큰 순 -> 남은 생명력이 작은 순으로 설정해두었기 때문에 우선순위 큐에서 나오는 대로 번식시켜주고 방문 처리를 한다면 동시에 번식하려는 경우에 생명력이 높은 세포가 차지할 수 있습니다. 또한 번식이 이루어진다면
ans값을 증가시켰습니다.그리고 나머지 부분에 대해서는 비활성 상태의 세포와 동일한데, 남은 생명력이 1로 다음 턴에 세포가 죽는다면
ans값을 감소시켜 죽은 세포에 대해서는 카운트하지 않도록 했습니다.리뷰 요청 사항
궁금한 점이나 더 좋은 방법이 있다면 리뷰 남겨주세요.
느낌점
처음에는 배양 용기의 크기를 설정하지 않고 풀려고 했었습니다.
따라서
Cell클래스에equals와hashCode를 재정의해서 HashSet에서 동일한 좌표라면 동일한 객체로 판단하여 방문처리를 했지만 시간초과가 발생하였습니다.HashSet에서도 객체를 검사하려면 O(n)이 발생할까요?