문제 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) 본 받을 코드
123456789101112131415161718192021222324252627282930313233 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
'Algorithm > Problem Solving' 카테고리의 다른 글
[하나라도 제대로] 코딩테스트를 위한 PS 프로젝트 (0) | 2022.01.03 |
---|---|
[BackJoon]2750 수 정렬하기 (0) | 2018.05.01 |
[BackJoon] 2455 지능형 기차 (0) | 2017.06.05 |
[BackJoon] 3076문제 상근이의체스판 (0) | 2017.05.05 |
[BackJoon] 9517문제 아이러브크로아티아 (0) | 2017.05.02 |