[알고리즘/백준] 1904번 : 01타일(Java)

2025. 4. 25. 08:28·Algorithms & Education/알고리즘
문제 1904번 : 01타일
문제링크 https://www.acmicpc.net/problem/1904
난이도 S3
언어 Java
분류 DP | 다이나믹 프로그래밍

 

 

📌 최종 정답 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	public static void main(String args[]) throws Exception {
		BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
		BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(System.out)));
		
		// 만들 수 있는 길이
		int n = Integer.parseInt(br.readLine());
		
		bw.write(String.valueOf(fn_dp(n)));
		
		bw.flush();
		bw.close();
	}
	
	public static int fn_dp(int n) {
		int value = 0;
		
		int a = 1;
		int b = 2;
		if(n <= 2) {
			return n;
		}
		else {
			for(int i = 3; i <= n; i ++) {
				value = (a + b) % 15746;
				a = b;
				b = value;
			}
		}
		return value;
	}
}


📌 구해야 하는 정답

 길이가 N인 모든 2진 수열의 개수를 15746으로 나눈 나머지


📌 풀이하기

1. 입력받기

// 만들 수 있는 길이
int n = Integer.parseInt(br.readLine());

 

2. 계산

public static int fn_dp(int n) {
    int value = 0;

    int a = 1;
    int b = 2;
    if(n <= 2) {
        return n;
    }
    else {
        for(int i = 3; i <= n; i ++) {
            value = (a + b) % 15746;
            a = b;
            b = value;
        }
    }
    return value;
}

 

3. 결과 출력

bw.write(String.valueOf(fn_dp(n)));

 

 

📌 시간 복잡도

DP 배열을 탐색하는 시간복잡도를 구해봅시다.

점화식을 계산하는데에는 단순 상수연산이 소요됩니다 → O(1)

이를 총 N개에 대해 탐색하므로, 최종 시간복잡도는 O(N)이 됩니다.

N은 최대 1,000,000이므로 시간제한 0.75초안에 충분히 가능한 연산 개수 입니다.

 

📌 코드 설계

  1. 문제의 input을 받습니다.
  2. DP의 초기값을 설정합니다.
  3. 세운 점화식에 따라 dp 배열을 탐색합니다.
  4. 정답을 출력합니다.

 

처음에 문제에 지시한 15746으로 나눈 나머지를 하지 않아 틀렸다.. ㅎ

이전에 풀었던 피보나치를 적용한 문제였다.

2025.04.23 - [알고리즘] - [알고리즘/백준] 2747번 : 피보나치 수(Java)

 

[알고리즘/백준] 2747번 : 피보나치 수(Java)

문제2747번 : 피보나치 수문제링크https://www.acmicpc.net/problem/2747난이도B2언어Java분류수학, 구현, 다이나믹 프로그래밍 📌 최종 정답 코드import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.Inpu

0206cho.tistory.com

 

'Algorithms & Education > 알고리즘' 카테고리의 다른 글

[알고리즘/백준] 2417번 : 정수 제곱근(Java)  (1) 2025.04.27
[알고리즘/백준] 1920번 : 수 찾기(Java)  (1) 2025.04.26
[알고리즘/백준] 2747번 : 피보나치 수(Java)  (1) 2025.04.24
[알고리즘/백준] 10815번 : 숫자카드(Java)  (1) 2025.04.23
[알고리즘/백준] 7785번 : 회사에 있는 사람(Java)  (1) 2025.04.22
'Algorithms & Education/알고리즘' 카테고리의 다른 글
  • [알고리즘/백준] 2417번 : 정수 제곱근(Java)
  • [알고리즘/백준] 1920번 : 수 찾기(Java)
  • [알고리즘/백준] 2747번 : 피보나치 수(Java)
  • [알고리즘/백준] 10815번 : 숫자카드(Java)
min_sol
min_sol
  • min_sol
    ෆ스누피가 찰리찰리해ෆ
    min_sol
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • Programming Languages (51)
        • JAVA (40)
        • C# (11)
      • Database (11)
        • oracle (7)
        • postgresql (3)
        • mysql (0)
      • Data & AI (5)
        • 빅데이터 (1)
        • AI (4)
      • Tools & Collaboration (30)
        • GitHub (10)
        • RPA (20)
      • GIS (1)
      • Web Development (58)
        • Spring (11)
        • JSP (11)
        • Front (1)
        • Vue (14)
        • PyQt (10)
        • Next.js (4)
      • Networking & Security (14)
        • TCP_IP (5)
        • 보안 (9)
      • Mobile (6)
        • 안드로이드스튜디오 (6)
      • Others (4)
        • 일상 (2)
        • 2021 (2)
      • Algorithms & Education (58)
        • 알고리즘 (52)
        • 세미나 | 교육 (5)
        • 자격증 (1)
  • 블로그 메뉴

    • 홈
    • 글쓰기
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    PyQt
    명품자바에센셜
    연습문제
    백준
    jsp
    Java
    스윙
    이클립스
    RPA
    자료구조
    계산기
    코딩테스트
    알고리즘
    자바
    생능출판
    VUE
    자동화
    PyQt5
    spring
    vue.js
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
min_sol
[알고리즘/백준] 1904번 : 01타일(Java)
상단으로

티스토리툴바