[실버 5] 1010번 다리 놓기

2025. 6. 12. 09:15·Coding Test/백준[JAVA]

문제

재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M)

재원이는 서쪽의 사이트와 동쪽의 사이트를 다리로 연결하려고 한다. (이때 한 사이트에는 최대 한 개의 다리만 연결될 수 있다.) 재원이는 다리를 최대한 많이 지으려고 하기 때문에 서쪽의 사이트 개수만큼 (N개) 다리를 지으려고 한다. 다리끼리는 서로 겹쳐질 수 없다고 할 때 다리를 지을 수 있는 경우의 수를 구하는 프로그램을 작성하라.

입력

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.

 

출력

각 테스트 케이스에 대해 주어진 조건하에 다리를 지을 수 있는 경우의 수를 출력한다.

 

예제 입력 1 

3
2 2
1 5
13 29

 

예제 출력 1

1
5
67863915

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
		StringBuilder sb = new StringBuilder();
		int num = Integer.parseInt(br.readLine()); // 테스트케이스 수

        // 미리 조합값을 계산
        int[][] comb = new int[30][30];

        // 파스칼의 삼각형 공식
        for(int i=0; i<30; i++) {
            comb[i][0] = 1; //  i개 중 아무것도 고르지 않기
            comb[i][i] = 1; // 전부 다 고르기

            for(int j=1; j<i; j++) {
                comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
            }
        }
        
		for(int i=0; i<num; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			int N = Integer.parseInt(st.nextToken());
			int M = Integer.parseInt(st.nextToken());
            
			sb.append(comb[M][N]).append("\n");
		}
		
		bw.write(sb.toString());
		bw.newLine();
		
		br.close();
		bw.flush();
		bw.close();
	}
}

 


처음엔 아래와 같은 방법으로 해결하려고 했으나, 큰 수를 곱하면서 overflow 가능성이 있어 동적계획법으로 변경하여 해결했다.

조합론

파스칼의 삼각형은 아래와 같은 방법이다.

파스칼의 삼각형 공식

for (int i = 0; i < 30; i++) {
    comb[i][0] = 1;        // nC0 = 1
    comb[i][i] = 1;        // nCn = 1
    for (int j = 1; j < i; j++) {
        comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > 백준[JAVA]' 카테고리의 다른 글

[실버 4] 25192번 인사성 밝은 곰곰이  (0) 2025.06.12
[브론즈 1] 1037번 약수  (0) 2025.06.12
[실버 2] 9184번 신나는 함수 실행  (3) 2025.06.11
[브론즈 1] 24416번 알고리즘 수업 - 피보나치 수 1  (0) 2025.06.11
[브론즈 5] 11050번 이항 계수 1  (0) 2025.06.11
'Coding Test/백준[JAVA]' 카테고리의 다른 글
  • [실버 4] 25192번 인사성 밝은 곰곰이
  • [브론즈 1] 1037번 약수
  • [실버 2] 9184번 신나는 함수 실행
  • [브론즈 1] 24416번 알고리즘 수업 - 피보나치 수 1
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Oracle
    CS
    데이터
    시큐리티
    JPA
    자바
    springboot
    리눅스마스터
    플러터
    Java
    programmers
    postgresql
    CS지식
    Spring Security
    Flutter
    리눅스
    backjoon
    데이터베이스
    DB
    python
    baekjoon
    스프링
    백준
    리눅스마스터 1급
    스프링부트
    pcce 기출문제
    프로그래머스
    spring
    Linux
    스프링 부트 쇼핑몰 프로젝트 with JPA
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[실버 5] 1010번 다리 놓기
상단으로

티스토리툴바