Algorithm/Problem Solving

[BackJoon] 2775문제 부녀회장이 될꺼야.

Jinlib 2017. 6. 5. 16:29

문제 URL https://www.acmicpc.net/problem/2775


1. 문제의 접근을 하기전에 알아야 할 정보 3가지



2. 풀이

처음에 문제가 이해가 안가서 좀 보았는데, 내가 이해한 방식을 아래와 같이 설명하고자 한다.

첫째줄에 Test case의 수를 받는데 만약 2라면 4개의 추가적인 입력을 받고 3이라면 6이라는 추가적인 입력을 받는다.

위 예제에선 2이므로 4가지 입력을 받았다.

다음 입력엔 첫번째 케이스의 층수, 그다음 입력엔 첫번째 케이스의 호수가 입력을 해야한다.

다음 입력엔 두번째 케이스의 층수, 그다음 입력엔 두번째 케이스의 호수가 입력을 해야한다.

출력은 각 케이스에 해당하는 거주자들의 수를 입력.


0층에는 1호부터 i호 까지 있는데 각 호엔 i명의 사람이 거주하고

1층 1호에 살려면 a-1층인  0층에서 1호 까지의 합을 더해준다.


[1층 3호]

0-1의 1명

0-2의 2명

0-3의 3명

0층의 3호까지의 합 총 6명이 존재

[2층 3호]

1-1의 1명

1-2의 3명

1-3의 6명

1층의 3호까지의 합 총 10명이 존재

[3층의 3호]

2-1의 1명

2-2의 4명

2-3의 10명

2층의 3호까지의 합 15명이 존재

 1) 내 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    public static void main(String[] args) throws IOException {
        long[][] apart = new long[15][15];
        for ( int i = 1; i <= 14; i++ ) {
            apart[i][1= 1;
        }
        for ( int i = 1; i <= 14; i++ ) {
            apart[0][i] = i;
        }
        for ( int k = 2; k <= 15; k++ ) {
            for ( int i = 2; i <= 14; i++ ) {
                int temp = 0;
                for ( int j = 1; j <= i; j++ ) {
                    temp += apart[k-2][j];
                }
                apart[k-1][i] = temp;
            }
        }
        StringBuffer sb = new StringBuffer("");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        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( apart[k][n] + "\n" );
        }
        System.out.print( sb.toString() );
    }
}
cs


3. 공부

1) 본 받을 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    public static void main(String[] args) throws IOException {
        long[][] apart = new long[15][15];
        for ( int i = 1; i <= 14; i++ ) {
            apart[i][1= 1;
        }
        for ( int i = 1; i <= 14; i++ ) {
            apart[0][i] = i;
        }
        for ( int k = 2; k <= 15; k++ ) {
            for ( int i = 2; i <= 14; i++ ) {
                int temp = 0;
                for ( int j = 1; j <= i; j++ ) {
                    temp += apart[k-2][j];
                }
                apart[k-1][i] = temp;
            }
        }
        StringBuffer sb = new StringBuffer("");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        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( apart[k][n] + "\n" );
        }
        System.out.print( sb.toString() );
    }
}
cs