Algorithm/BOJ(Baekjoon Online Judge)
[백준 - 9461번] 파도반 수열 - Java //Wello Horld//
koucop
2019. 7. 10. 14:25
이번에는 BOJ의 9461 번 문제 파도반 수열을 풀어보도록 하자
처음에 변의 길이가 1인 정삼각형부터 시작해서, 변을 이어가며 정삼각형을 그리는 문제이다.
일단, P(1) = 1, P(2) = 1, ... , P(10) = 9, P(11) = 12 가 되는 것이 그림으로, 예시로, 주어져있다.
입력으로는 테스트케이스 T가 먼저 주어지고, 각각의 테스트 케이스에 P(N) 의 N의 값이 주어진다. 출력으로 각 테스트케이스마다 P(N) 값을 출력해주면 되는 문제이다.
이문제를 풀때, 일단 N = 5 일때 까지는, 예외로 생각하고 문제를 풀었다. N = 6일 때부터 P(N) = P(N - 1) + P(N - 5) 가 되므로, 이를 이용해서 N = 1 부터 N = 100까지의 P[N]의 값을 먼저 구하게 해서, 문제를 풀면 아주 간단하다.
성공한 코드는 아래와 같이 작성했다
import java.io.*;
import java.util.*;
public class sample {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
long[] P = new long[101];
P[1] = 1; P[2] = 1; P[3] = 1; P[4] = 2; P[5] = 2;
for(int i = 6; i <= 100; i++){
P[i] = P[i - 1] + P[i - 5];
}
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
int N = Integer.parseInt(br.readLine());
bw.write(P[N] + "\n");
}
bw.flush();
br.close();
bw.close();
}
}