개발 블로그
article thumbnail
Published 2023. 10. 16. 18:41
2758번. 로또 Algorithm/백준 알고리즘

 

아이디어

dp[i][j] 를 1 ~ j 까지 숫자 중 i 개를 문제에서 요구하는 규칙에 따라 뽑을 때 경우의 수라고 정의

 

dp[i][j] 는 1 ~ j / 2 까지 i - 1 개를 뽑고 여기에 j 를 추가하는 케이스들 + 1 ~ j-1 까지 i 개를 뽑은 케이스들의 합이된다.

 

dp[i][j] = dp[i - 1][j / 2] + dp[i][j - 1]

 

풀이코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());

        long[][] dp = new long[11][2001];

        Arrays.fill(dp[0], 1);

        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= 2000; j++) {
                dp[i][j] = dp[i - 1][j / 2] + dp[i][j - 1];
            }
        }

        StringBuilder results = new StringBuilder();
        for (int i = 0; i < T; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int n = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());

            results.append(dp[n][m]).append("\n");
        }

        System.out.println(results);
    }
}

'Algorithm > 백준 알고리즘' 카테고리의 다른 글

2056번. 작업  (1) 2023.10.17
2073번. 수도배관공사  (1) 2023.10.16
2504번. 괄호의 값  (1) 2023.10.11
9251번. LCS  (0) 2023.10.09
12865번. 평범한 배낭  (0) 2023.10.09
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!