[๋ฐฑ์ค] C 21์ผ์ฐจ (๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ #2775๋ฒ)
https://www.acmicpc.net/problem/2775
2775๋ฒ: ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ
์ฒซ ๋ฒ์งธ ์ค์ Test case์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์ผ์ด์ค๋ง๋ค ์ ๋ ฅ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ค์ ์ ์ k, ๋ ๋ฒ์งธ ์ค์ ์ ์ n์ด ์ฃผ์ด์ง๋ค
www.acmicpc.net
1. ๋ฌธ์
ํ์ ๋ฐ์ํ์ ์ฐธ์ํ๋ ๊ฒ์ ์ข์ํ๋ ์ฃผํฌ๋ ์ด๋ฒ ๊ธฐํ์ ๋ถ๋ ํ์ฅ์ด ๋๊ณ ์ถ์ด ๊ฐ ์ธต์ ์ฌ๋๋ค์ ๋ถ๋ฌ ๋ชจ์ ๋ฐ์ํ๋ฅผ ์ฃผ์ตํ๋ ค๊ณ ํ๋ค.
์ด ์ํํธ์ ๊ฑฐ์ฃผ๋ฅผ ํ๋ ค๋ฉด ์กฐ๊ฑด์ด ์๋๋ฐ, “a์ธต์ bํธ์ ์ด๋ ค๋ฉด ์์ ์ ์๋(a-1)์ธต์ 1ํธ๋ถํฐ bํธ๊น์ง ์ฌ๋๋ค์ ์์ ํฉ๋งํผ ์ฌ๋๋ค์ ๋ฐ๋ ค์ ์ด์์ผ ํ๋ค” ๋ ๊ณ์ฝ ์กฐํญ์ ๊ผญ ์งํค๊ณ ๋ค์ด์์ผ ํ๋ค.
์ํํธ์ ๋น์ด์๋ ์ง์ ์๊ณ ๋ชจ๋ ๊ฑฐ์ฃผ๋ฏผ๋ค์ด ์ด ๊ณ์ฝ ์กฐ๊ฑด์ ์งํค๊ณ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ฃผ์ด์ง๋ ์์ ์ ์ k์ n์ ๋ํด k์ธต์ nํธ์๋ ๋ช ๋ช ์ด ์ด๊ณ ์๋์ง ์ถ๋ ฅํ๋ผ. ๋จ, ์ํํธ์๋ 0์ธต๋ถํฐ ์๊ณ ๊ฐ์ธต์๋ 1ํธ๋ถํฐ ์์ผ๋ฉฐ, 0์ธต์ iํธ์๋ i๋ช ์ด ์ฐ๋ค.
2. ์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ Test case์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์ผ์ด์ค๋ง๋ค ์ ๋ ฅ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ค์ ์ ์ k, ๋ ๋ฒ์งธ ์ค์ ์ ์ n์ด ์ฃผ์ด์ง๋ค
3. ์ถ๋ ฅ
๊ฐ๊ฐ์ Test case์ ๋ํด์ ํด๋น ์ง์ ๊ฑฐ์ฃผ๋ฏผ ์๋ฅผ ์ถ๋ ฅํ๋ผ.
4. ๋ฌธ์ ํ์ด
arr[i][j] = arr[i][j-1] + arr[i-1][j];
1) ๋ฐํ์ ์๋ฌ
#include <stdio.h>
#include <stdlib.h>
void find(int k, int n){
int arr[k][n];
for(int i=0; i<n; i++){
arr[0][i]=i+1;
//printf("arr[0][%d]= %d\n",i,arr[0][i]);
}
for(int i=1; i<=k; i++){
for(int j=0; j<n; j++){
if(j==0){
arr[i][j]=1;
//printf("arr[%d][%d]=%d\n",i,j,arr[i][j]);
}
else{
arr[i][j]=arr[i][j-1] + arr[i-1][j];
//printf("arr[%d][%d]=%d\n",i,j,arr[i][j]);
}
}
printf("%d\n", arr[k][n-1]);
}
}
int main()
{
int test,k,n;
scanf("%d",&test);
for(int i=0; i<test; i++){
scanf("%d",&k);
scanf("%d",&n);
find(k,n);
}
return 0;
}
์ ๊ทผ ๋ฐฉ์
15,15,๋ฐฐ์ด๋ก ๊น ํ์ ์์ด scanf๋ก ๋ฐ์ ๋, 1์ธต 3ํธ๋ฉด 1์ธต 3ํธ๊น์ง๋ง ๋ฐฐ์ด๋ก ๋ง๋ค๋ฉด ๋๊ฒ ์ง?
๊ทผ๋ฐ ํ๋ฒ๋ง ๋ฐ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ๋ฒ scanf๋ก ๋ฐ์์ k,n์ด ๋ณ๊ฒฝ๋๋ฉด ๊ทธ๋๋ง๋ค ์ํํธ ์ฃผ๋ฏผ์ ๋ฐฐ์ด์ ์ฒ์๋ถํฐ ๋ค์ ํด์ผ ํจ -> ์๊ฐ ์ค๋ ๊ฑธ๋ฆผ, arr ์ค๋ณต
2) 15,15 ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ๊น์ ๋์ (์ต์ข )
#include <stdio.h>
#include <stdlib.h>
int arr[15][15];
void find(){
for(int i=0; i<15; i++){
arr[0][i]=i+1;
}
for(int i=1; i<=15; i++){
for(int j=0; j<15; j++){
if(j==0){
arr[i][j]=1;
}
else{
arr[i][j]=arr[i][j-1] + arr[i-1][j];
}
}
}
}
int main()
{
int test,k,n;
scanf("%d",&test);
find();
for(int i=0; i<test; i++){
scanf("%d",&k);
scanf("%d",&n);
printf("%d\n",arr[k][n-1]);
}
return 0;
}