처음 문제를 읽고 이게 무슨 말이지?..라는 생각이 들었다.
나선형..정삼각형..가장 긴 변의 길이 막 나오는데 머리가 복잡해지고 그림을 어떻게 이해해야하나 하는 생각이 가득했다.
하지만 풀이 이 전에 문제 제목을 잘 읽고 수열이라는 말을 캐치를 하고 들어갔다면 더 쉬웠을 것이다.
아무튼 가닥을 잡은 방법은 이 전에 푼 01타일에서 깨우친 방법이다. 01타일과 비슷한 형식에 어찌해야할지 감이 안 잡히는 문제였는데, 무작정 메모장에 1~10이나 그 이상까지 막 적어보면서 규칙을 찾아보는 방식을 사용했더니 규칙이 보이기 시작했고 문제를 풀었다.
규칙 : table[n] = table[n-2] + table[n-3]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
public static int[] table = new int[101];;
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
table[0] = 0;
table[1] = 1;
table[2] = 1;
table[3] = 1;
for(int i = 0 ; i < n ; i++) {
int value = Integer.parseInt(br.readLine());
System.out.println(getTile(value));
}
}
private static int getTile(int n) {
if(table[n] == 0)
table[n] = (getTile(n-2) + getTile(n-3));
return table[n];
}
}
문제를 풀고나서 와 완벽하다~ 이러면서 제출을 했는데 4%에서 갑자기 틀렸다고 나왔다.
이해는 안되는데 아직 내가 모든 경우에 완벽하다라는 자신이 없어서 직접 1~12까지 넣어보고는 아..이건 되야하는건데 싶었다. 조금 더 고민하다가 이건 돌파구가 안 보여서 서칭을 해보니 int가 아닌 long을 해야 하는 것..
범위에 신경을 써야한다!!!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
public static long[] table = new long[101];;
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
table[0] = 0;
table[1] = 1;
table[2] = 1;
table[3] = 1;
for(int i = 0 ; i < n ; i++) {
int value = Integer.parseInt(br.readLine());
System.out.println(getTile(value));
}
}
private static long getTile(int n) {
if(table[n] == 0)
table[n] = (getTile(n-2) + getTile(n-3));
return table[n];
}
}