class LongJump {
@Nested
class TestCases{
@Test
public void case1 () {
/**
* (1칸, 1칸, 1칸)
* (1칸, 2칸)
* (2칸, 1칸)
*/
int n = 3;
int result = 3;
Assertions.assertEquals(result, solution(n));
}
@Test
public void case2 () {
/**
* (1칸, 1칸, 1칸, 1칸)
* (1칸, 2칸, 1칸)
* (1칸, 1칸, 2칸)
* (2칸, 1칸, 1칸)
* (2칸, 2칸)
*/
int n = 4;
int result = 5;
Assertions.assertEquals(result, solution(n));
}
@Test
public void case3 () {
/**
* (1칸, 1칸, 1칸, 1칸, 1칸)
* (2칸, 1칸, 1칸, 1칸)
* (1칸, 2칸, 1칸, 1칸)
* (1칸, 1칸, 2칸, 1칸)
* (1칸, 1칸, 1칸, 2칸)
* (2칸, 2칸, 1칸)
* (2칸, 1칸, 2칸)
* (1칸, 2칸, 2칸)
*/
int n = 5;
int result = 8;
Assertions.assertEquals(result, solution(n));
}
@Test
public void case4 () {
/**
* (1칸, 1칸, 1칸, 1칸, 1칸, 1칸)
* (2칸, 1칸, 1칸, 1칸, 1칸)
* (1칸, 2칸, 1칸, 1칸, 1칸)
* (1칸, 1칸, 2칸, 1칸, 1칸)
* (1칸, 1칸, 1칸, 2칸, 1칸)
* (1칸, 1칸, 1칸, 1칸, 2칸)
*
* (2칸, 2칸, 1칸, 1칸)
* (1칸, 1칸, 2칸, 2칸)
* (2칸, 1칸, 2칸, 1칸)
* (1칸, 2칸, 1칸, 2칸)
* (2칸, 1칸, 1칸, 2칸)
* (1칸, 2칸, 2칸, 1칸)
*
* (2칸, 2칸, 2칸)
*/
int n = 6;
int result = 13;
Assertions.assertEquals(result, solution(n));
}
}
public long solution(int n) {
return this.check(n, 0, 0, 1);
}
private long check ( int n , int count, int prev, int next ) {
int num = 1_234_567;
if( n <= count ) return next % num;
else return this.check(n, count + 1, next % num, prev % num + next % num);
}
}