백준 웹사이트 "2775번 - 부녀회장이 될테야" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#include <stdio.h>
int main(void){
int T;
scanf("%d", &T);
for(int i=0; i<T; i++){
int k, n;
scanf("%d\n%d", &k, &n);
// 1. 각 집 거주민 수 배열 선언/초기화
int residents[k][n];
for(int j1=0; j1<k; j1++){
for(int j2=0; j2<n; j2++){
if(j1==0){
residents[0][j2] = j2+1; // 0층 거주민 수 초기화
}
else{
residents[j1][j2] = 0; // 나머지 층 거주민 수 초기화
}
}
}
// 2. 반복문을 통해 각 집 거주민 수 계산
for(int floor=1; floor<k; floor++){
for(int num=0; num<n; num++){
for(int prev_num=0; prev_num<=num; prev_num++){
residents[floor][num] += residents[floor-1][prev_num];
}
//printf("floor: %d, num: %d, residents: %d\n", floor, num+1, residents[floor][num]);
}
}
// 3. k층 n호 거주민 수 출력
int resident_num = 0;
for(int count=0; count<n; count++){
resident_num += residents[k-1][count];
}
printf("%d\n", resident_num);
}
}
문제 풀이
아래와 같이 단계적으로 문제를 풀어나가면 됩니다.
1. 각 집 거주민 수 배열을 선언 및 초기화합니다.
Line 12에서 선언한 'residents' 배열은 각 집의 거주민 수를 저장하기 위한 배열입니다. 'residents[k][n]'의 형태이므로, residents[a][b]는 a층의 b호에 거주하는 사람의 수입니다. Line 13 ~ 22에서는 residents 배열을 초기화합니다. 0층의 거주민 수는 정해져있으므로 조건대로 초기화를 하고, 그 외의 방은 모두 0으로 초기화합니다.
2. 반복문을 통해 각 집 거주민 수를 계산합니다.
0층의 거주민 수는 주어지므로, 1층부터 k-1층까지, 각 층별로 1호부터 거주민 수를 계산합니다. 계산하는 방식은 문제 조건대로, 아래층의 1호부터 해당 집 호수까지 더합니다. 이렇게 중첩 루프(nested loop)를 완료하면, residents 배열에는 0층부터 k-1층까지 거주민 수가 저장됩니다.
3. k층 n호의 거주민 수를 출력합니다.
마지막 k층 n호의 거주민 수는 k-1층의 0호부터 n호까지의 거주민 수를 더해주면 됩니다.
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 10757번 - 큰 수 A+B (0) | 2022.01.20 |
---|---|
[백준/C언어] 2839번 - 설탕 배달 (0) | 2022.01.20 |
[백준/C언어] 10250번 - ACM 호텔 (0) | 2022.01.18 |
[백준/C언어] 2869번 - 달팽이는 올라가고 싶다 (0) | 2022.01.17 |
[백준/C언어] 1193번 - 분수찾기 (0) | 2022.01.16 |