문제
코드
function solution(n) {
const ans = [];
const funcObj = {
move2(c, t, l) {
ans.push([c, l], [c, t], [l, t])
}
};
for(let i=3; i<=n; i++) {
funcObj['move' + i] = (c, t, l) => {
funcObj['move' + (i-1)](c, l, t);
ans.push([c, t]);
funcObj['move' + (i-1)](l, t, c);
}
}
funcObj['move' + n](1, 3, 2);
return ans;
}
패턴만 알면 간단한 문제
뇌가 파업중이라 패턴 찾는데 오래걸림....
- 피보나치처럼 dp로 풀었다.
- c는 current로 이동을 시작할 막대기
- t는 target으로 옮겨질 막대기
- l은 last로 그냥 나머지다.
- 2개일 때의 패턴은 쉬워서 funcObj에 담아둔다.
- 3개일 때부터 이전 이동 방식에서 c, l, t로 바꿔준다.
[c, t]
를 따로 넣어준다.
- 다시 l, t, c를 돌려주면 완성이다.
여기선 성공했지만 시간이 쭉쭉 늘어나는 걸 볼 수 있다.