팡세영
Log sey
팡세영
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • PS (45)
      • programmers (13)
      • 백준 (29)
    • Android (16)
    • Daily (0)
    • Kotlin (6)
    • Design Pattern (1)
    • Java (1)
    • Flutter (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 구현
  • 이분탐색
  • Android
  • 코틀린
  • programmers #프로그래머스
  • programmers
  • flutter
  • 백준
  • 완전탐색
  • DFS
  • 하단네비게이션바
  • binding
  • 실버
  • ArcitecturePattern
  • compose
  • LEVEL2
  • mvvm
  • java
  • TestCode
  • 정렬
  • 안드로이드
  • CustomView
  • 프로그래머스
  • 골드
  • 문자열
  • 자바
  • 해쉬맵
  • 의존성 주입
  • Kotlin
  • BFS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
팡세영

Log sey

[백준] - 피보나치함수 (1003)
PS/백준

[백준] - 피보나치함수 (1003)

2022. 11. 24. 15:04

 


https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net


규칙을 찾으면 간단히 해결할 수 있는 문제이다.

 

우선 규칙은 아래와 같다.

fibo(0)은 0을 1번, 1을 0번 출력한다.

fibo(1)은 0을 0번, 1을 1번 출력한다.

그렇다면 fibo(2)는 0과 1을 몇번 출력할까?

 

fibo(2) = fibo(0) + fibo(1)이며 이것을 아래와 같이 풀어 쓸 수 있다.

fibo(2)의 0 출력 횟수 =  fibo(0)이 0을 출력한 횟수 + fibo(1)이 0을 출력한 횟수

fibo(2)의 1 출력 횟수 =  fibo(0)이 1을 출력한 횟수 + fibo(1)이 1을 출력한 횟수

 

점화식을 도출하면 다음과 같다.

i는 fibo(i)와 같으며,
dp[i][0] =fibo(i)가 0을 출력한 횟수 
dp[i][1]은 fibo(i)가 1을 출력한 횟수이다.

// 점화식
dp[i][0] = dp[i-2][0] + dp[i-1][0];
dp[i][1] = dp[i-2][1] + dp[i-1][1];

[Java]

import java.io.*;

public class Main
{

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int t = Integer.parseInt(br.readLine());
        while(t --> 0){
            int n = Integer.parseInt(br.readLine());
            int dp[][] = new int[41][2];

            dp[0][0] = 1; dp[0][1] = 0;
            dp[1][0] = 0; dp[1][1] = 1;

            for(int i=2; i<=n; i++){
                dp[i][0] = dp[i-2][0] + dp[i-1][0];
                dp[i][1] = dp[i-2][1] + dp[i-1][1];
            }

            bw.write(dp[n][0] + " " + dp[n][1] + "\n");

        }

        bw.flush();
    }

}

 

시간 복잡도는 O(n)이 되게 된다.

 

 

'PS > 백준' 카테고리의 다른 글

[백준] - 도영이가 만든 맛있는 음식 2691  (0) 2023.02.28
[백준] - Australian Voting (호주식 투표법) 4419  (0) 2023.02.13
[백준] 영상처리 21938  (0) 2022.11.11
[백준] 문자열 잘라내기 2866  (2) 2022.11.10
[백준] - 암기왕 2776  (0) 2022.11.09
    'PS/백준' 카테고리의 다른 글
    • [백준] - 도영이가 만든 맛있는 음식 2691
    • [백준] - Australian Voting (호주식 투표법) 4419
    • [백준] 영상처리 21938
    • [백준] 문자열 잘라내기 2866
    팡세영
    팡세영
    Android, CS, PS

    티스토리툴바