https://www.acmicpc.net/problem/3060
const input = require('fs')
.readFileSync(process.platform === 'linux' ? 0 : './data.txt')
.toString()
.split('\n');
const N = input.shift();
for(let i=0; i<N; i++) {
const food = input.shift();
let pigs = input.shift().split(" ").map(Number);
let day = 0;
let totalFood = 0;
while(food >= totalFood) {
day++;
pigs.forEach((pig) => {
totalFood += pig;
});
if(food < totalFood) {
break;
}
let newPigs = [];
//좌,우,앞에 있는 돼지들 먹이 합산
for(let k=0; k<pigs.length; k++) {
let leftPig = k==0 ? pigs.length-1 : k-1;
let rightPig = k==pigs.length-1 ? 0 : k+1;
let frontPig = k>2 ? k-3 : k+3;
const pigFood = pigs[k] + pigs[leftPig] + pigs[rightPig] + pigs[frontPig];
newPigs.push(pigFood);
}
pigs = newPigs;
totalFood = 0;
}
console.log(day)
}
처음 문제를 보고 종류에 수학도 있길래 뭘까 하고 찾아보다가
혹시 원형수열 문제인가? 싶었는데 GPT에게 물어보니 그건 아니란다.
그래서 안심하고 열심히 짱구를 굴려서 풀었다.
살짝 고민됐던게 처음돼지 옆의 마지막돼지 배열 인덱스를 구하는것이었는데
마지막 돼지란 얘기는 배열의 마지막 요소라는 뜻이니까 배열개수-1을 해줬다.
그리고 맞은편 돼지의 인덱스는 일정한 패턴이 있다.
돼지개수/2 만큼 증가하다가 중간돼지를 넘어가면 index가 절반만큼 감소된다.
아무튼 이런식으로 문제를 풀어봤다!