19-20 동계 모각코 동아리 4회차 결과

 

백준

연속합


package bj;



import java.util.*;

public class bj_1912 {



	public static void main(String[] args) {

		// TODO Auto-generated method stub

		Scanner scan = new Scanner(System.in);

		int n = scan.nextInt();

		int[] ans = new int[n];

		int[] d = new int[n];

		//String[] tmp = (scan.nextLine()).split(" ");

		int r = -9999;

	

		for(int i = 0; i<n; i++)

		{

			d[i] = scan.nextInt();

		}

		

		ans[0] = d[0];

		

		for(int i = 1; i<n; i++)

		{

			ans[i] = Math.max(ans[i-1]+d[i], d[i]);

		}

		

		for(int i = 0; i<n; i++)

		{

			r = Math.max(ans[i], r);

		}

		System.out.println(r);

	}



}



한번에 점화식을 세우고 맞은 문제다. 처음에 가장 큰 연속합이라는 말때문에 조금 헤매었는데 예제문제를 거꾸로 풀어보면서 감을 잡았다.

제곱수의 합


Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        int[] d = new int[n+1];

        for (int i=1; i<=n; i++) {

            d[i] = i;

            for (int j=1; j*j <= i; j++) {

                if (d[i] > d[i-j*j] + 1) {

                    d[i] = d[i-j*j] + 1;

                }

            }

        }

        System.out.println(d[n]);

합분해


int n = scan.nextInt();

		int k = scan.nextInt();



		double[][] d = new double[k + 1][n + 1];

		d[0][0] = 1;

		for (int i = 1; i <= k; i++) {

			for (int j = 0; j <= n; j++) {

				for (int l = 0; l <= j; l++) {

					d[k][n] += d[k - 1][j - l];

				}

			}

		}

시간내에 못풀어서 담을 확인한 문제이다.