[백준:9461][JAVA] 파도반 수열

Boknami·2023년 9월 5일
0

백준문제풀이

목록 보기
29/45

첫 문제 접근

처음 문제를 읽고 이게 무슨 말이지?..라는 생각이 들었다.
나선형..정삼각형..가장 긴 변의 길이 막 나오는데 머리가 복잡해지고 그림을 어떻게 이해해야하나 하는 생각이 가득했다.

하지만 풀이 이 전에 문제 제목을 잘 읽고 수열이라는 말을 캐치를 하고 들어갔다면 더 쉬웠을 것이다.

아무튼 가닥을 잡은 방법은 이 전에 푼 01타일에서 깨우친 방법이다. 01타일과 비슷한 형식에 어찌해야할지 감이 안 잡히는 문제였는데, 무작정 메모장에 1~10이나 그 이상까지 막 적어보면서 규칙을 찾아보는 방식을 사용했더니 규칙이 보이기 시작했고 문제를 풀었다.

규칙 : table[n] = table[n-2] + table[n-3]

😩 실패 코드 및 이유(4%에서 항상 틀린 이유)

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];
    }
}

0개의 댓글