Coding Test Study/Programmers

아메바 분열

똑똑한망치 2024. 8. 1. 11:59
728x90
반응형

 

문제 풀이 방법

BFS를 사용하였다. Queue에 아메바가 분열을 할 수 있는 시간까지 남은 시간을 넣는다. 즉 0이라면 바로 분열이 가능하고 0이 아니라면 그 시간만큼은 휴식기에 들어간 아메바인 것이다.

0이므로 바로 분열을 하게 되면 2개의 추가적인 이름이 더 필요하다.

 

import java.util.*;

class Solution {
    public int solution(int delay, int N) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(0);
        int count = 1;

        for (int i = 1; i <=N ; i++) {
            Queue<Integer> newQueue = new LinkedList<>();

            while(!queue.isEmpty()) {
                int a = queue.remove();

                // 아메바가 바로 분열이 가능한 시간(0) 이라면
                if(a == 0 ) {
                    newQueue.add(0);  // 바로 분열가능한 아메바 1개
                    newQueue.add(delay); // 휴식기에 접어든 아메바 1개
                    count += 2;
                } else {

                    // 1만큼의 시간 휴식을 취했기 때문에 -1을 하고 다시 넣는다.
                    newQueue.add(a-1);
                }
            }
            queue = newQueue;
        }
        return count;
    }
}
반응형

'Coding Test Study > Programmers' 카테고리의 다른 글

잡기 놀이  (0) 2024.08.02
마을 판사 찾기  (0) 2024.07.31
[Java] 난이도 - 중 / DP 문제  (0) 2024.03.22
[Java] k 자리 제거하기  (0) 2024.03.22
[Java] 선을 넘나드는 사각형  (1) 2024.03.22