IT 정보/알고리즘(백준, BOJ)

[백준-BOJ] 5557

Dalyoung 2021. 3. 2. 22:34
728x90

www.acmicpc.net/problem/5557

 

5557번: 1학년

상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀

www.acmicpc.net

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) throws IOException {
		Main m = new Main();
		m.doit();
	}


	int N;
	int arr[];
	long dp[][];
	public void doit() throws IOException{
		//System.setIn(new FileInputStream("input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());
		arr = new int[N + 1];
		dp = new long[N+1][21];
		for(int i = 0; i < N+1; i++){
			Arrays.fill(dp[i], -1);
		}
		String temp[] = br.readLine().split(" ");
		for(int i = 1; i <= temp.length; i++){
			arr[i] = Integer.parseInt(temp[i-1]);
		}
//		System.out.println(Arrays.toString(arr));
//		for(int tc = 1; tc <= T; tc++){
//			
//		}
//		printDp();
		System.out.println(calc(2, arr[1]));
//		printDp();
		br.close();
	}
	
	long calc(int index, int sum){
		if(sum < 0 || sum > 20){
			return 0;
		}
		
		if(index == N){
			if(sum == arr[index]){
				return 1;
			}else{
				return 0;
			}
		}
		
		long ret = dp[index][sum];
		if(ret != -1){
			return ret;
		}
		ret = 0;
		ret += calc(index + 1, sum + arr[index]);
		ret += calc(index + 1, sum - arr[index]);
		dp[index][sum] = ret;
		return ret;
		
	}
	
	void printDp(){
		for(int i = 0; i < N+1; i++){
			System.out.println(Arrays.toString(dp[i]));
		}
		System.out.println();
	}
}
728x90
반응형

'IT 정보 > 알고리즘(백준, BOJ)' 카테고리의 다른 글

[백준-BOJ] 5585  (0) 2021.04.07
[백준-BOJ] 5565  (0) 2021.03.02
[백준-BOJ] 5543  (0) 2021.03.02
[백준-BOJ] 5373  (0) 2021.03.02
[백준-BOJ] 5015  (0) 2021.03.02