본문 바로가기
Problem Solving/Baekjoon

[백준] 4172 sqrt log sin - Dynamic Programming / Java

by graycode 2023. 9. 27.

 문제 링크

 

4172번: sqrt log sin

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 한 줄에 하나씩 주어진다. 각 줄에는 \(i\)가 주어지며, 이 수는 0보다 작지 않고, 백만보다 크지 않다. 입력의 마지막 줄에는 -1이 주어지며,

www.acmicpc.net

 

 풀이 코드

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

        int[] dp = new int[1000001];
        dp[0] = 1;

        for (double i = 1; i < dp.length; i++)
            dp[(int) i] = (dp[(int) (i - Math.sqrt(i))] + dp[(int) Math.log(i)] + dp[(int) (i * Math.pow(Math.sin(i), 2))]) % 1000000;

        int n;
        while ((n = read()) != -1) sb.append(dp[n]).append("\n");

        bw.write(sb.toString());
        bw.flush();
    }

    private static int read() throws IOException {
        int c, n = System.in.read() & 15;

        boolean flag = n == 13;
        if (flag) n = System.in.read() & 15;

        while ((c = System.in.read()) > 32) n = (n << 3) + (n << 1) + (c & 15);

        return flag ? ~n + 1 : n;
    }

}

댓글