HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💌
JJong’s Archive
/
🤖
코딩테스트
/
에너지 리액터

에너지 리액터

성공여부
YES
걸린시간(분)
정리
완료
문제출처
네이버
생성 일시
Apr 23, 2025 01:37 PM

1️⃣ 문제

notion image

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는 끝날 때까지 걸리는 시간)