1️⃣ 문제

2️⃣ 문제 해결 전략
just 반복문
- 현재 에너지 배열을 유지하고, 매 초마다 에너지 전달 여부를 확인.
- 전달은 동시이기 때문에 변경 사항은 별도의 배열에 저장했다가 한꺼번에 반영해야 함.
- 더 이상 어떤 리액터도 전달하지 않으면 종료.
3️⃣ 코드 및 설명
내 코드
function solution(energyLevels) { var answer = 0; var isSwap = true while (isSwap) { isSwap=false var nextLevels=[...energyLevels] for (let i=0;i<energyLevels.length;i++) { if (energyLevels[i]>=2) { isSwap=true nextLevels[i]-=2 if (i===0) { nextLevels[i+1]+=1 } else if (i===energyLevels.length-1 ) { nextLevels[i-1]+=1 } else { nextLevels[i-1]+=1 nextLevels[i+1]+=1 } } } if (isSwap) answer++ energyLevels=[...nextLevels] } return answer; }
모범 코드
function solution(energies) { const N = energies.length; let time = 0; while (true) { let nextEnergyChange = Array(N).fill(0); let active = false; for (let i = 0; i < N; i++) { if (energies[i] >= 2) { // 리액터 작동 let canTransfer = false; if (i > 0) { nextEnergyChange[i - 1] += 1; canTransfer = true; } if (i < N - 1) { nextEnergyChange[i + 1] += 1; canTransfer = true; } if (canTransfer) { energies[i] -= 2; active = true; } } } // 변화 반영 for (let i = 0; i < N; i++) { energies[i] += nextEnergyChange[i]; } if (!active) break; // 모든 리액터가 비활성화 time++; } return time; }
4️⃣ 시간복잡도
O(T*N) ⇒ (T는 끝날 때까지 걸리는 시간)