본문 바로가기
Algorithm/Baekjoon

[백준] 2775번 : 부녀회장이 될테야 - Java

by unknownomad 2022. 3. 26.

https://www.acmicpc.net/problem/2775

 

2775번: 부녀회장이 될테야

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다

www.acmicpc.net



주의점

  • 가장 첫 줄 : 테스트 케이스
  • 테스트 케이스 다음 줄부터 두 줄씩 묶어 k 와 n 이 주어짐
  • 아파트 : 0층부터 시작, 각 층은 1호부터 시작

알고리즘

  • k 층 n 호 = (k-1) 층 1 호 + (k-1) 층 2 호 + ... + (k-1) 층 n 호

 

입력 조건

첫 번째 줄에 Test case의 수 T가 주어진다.
그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다.
(1 <= k <= 14, 1 <= n <= 14)

➡ 테스트 케이스 수만큼 배열 반복 생성하기보단, 입력의 최대값만큼 배열의 사이즈 한 번에 생성하기

 

순서

  1. 2차원 배열 생성
  2. (1~14층까지) + (각 층의 2호에서 14호까지) 반복해서 값 생성

각 층 2호부터 14호까지 값  = 두 개의 노란색 값을 더한 값


풀이

1. Scanner

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
		
        Scanner in = new Scanner(System.in);
		
        //아파트 생성
        int[][] APT = new int[15][15];
 
        for(int i = 0; i < 15; i++) {
            APT[i][1] = 1; //i층 1호
            APT[0][i] = i; //0층 i호
        }
 
        for(int i = 1; i < 15; i ++) { //1 ~ 14층
            for(int j = 2; j < 15; j++) { //2 ~ 14호
                //i 층 (j-1) 호 + (i-1) 층 j 호
                APT[i][j] = APT[i][j - 1] + APT[i - 1][j];
            }
        }
		
        //테스트 케이스
        int T = in.nextInt();
		
        for(int i = 0; i < T; i++) {
            int k = in.nextInt();
            int n = in.nextInt();
            System.out.println(APT[k][n]);
        }
    }
}

 

2. BufferedReader

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
    public static int[][] APT = new int[15][15];
 
    public static void main(String[] args) throws IOException {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
		
        makeApt(); //아파트 만들기 
		
        int T = Integer.parseInt(br.readLine()); //테스트 케이스
        for (int i = 0; i < T; i++) {
            int k = Integer.parseInt(br.readLine()); //자료형 타입 유의
            int n = Integer.parseInt(br.readLine());
            
            sb.append(APT[k][n]).append('\n');
        }
        System.out.println(sb);
    }
	
    public static void makeApt() {
    
        // 아파트 생성
        for (int i = 0; i < 15; i++) {
            APT[i][1] = 1; //i층 1호
            APT[0][i] = i; //0층 i호
        }
 
        for (int i = 1; i < 15; i++) { //1 ~ 14층
            for (int j = 2; j < 15; j++) { //2 ~ 14호
                //i 층 (j-1) 호 + (i-1) 층 j 호
                APT[i][j] = APT[i][j - 1] + APT[i - 1][j];
            }
        }
    }
}

성능

  • BufferedReader > Scanner

 


출처 : https://st-lab.tistory.com/78

댓글