백준
백준 1233번 주사위 - C언어
해보쟈
2024. 3. 7. 10:42
#include <stdio.h>
int main(void) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int s1[41], s2[41], s3[41], sum[81] = { 0 };
//배열에 숫자 넣어주기
for (int i = 0; i < a; i++) {
s1[i] = i+1;
}
for (int i = 0; i < b; i++) {
s2[i] = i + 1;
}
for (int i = 0; i < c; i++) {
s3[i] = i + 1;
}
//s1,s2,s3 배열들의 합을 저장하는 배열
int p = 1;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
for (int k = 0; k < c; k++) {
sum[(s1[i] + s2[j] + s3[k])+1] += p;
}
}
}
//최댓값 구하기
int max = 0;
int index;
for(int i =0;i<81;i++){
if(max<sum[i]){
max = sum[i];
index = i;
}
}
printf("%d",index-1);
return 0;
}
위 코드는 처음에 내가 작성한 코드이고, 다른 사람들의 코드를 보며 배운점을 작성하겠다.
먼저 처음에는
for (int i = 0; i < a; i++) {
s1[i] = i+1;
}
---------------------------------
int p = 1;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
for (int k = 0; k < c; k++) {
sum[(s1[i] + s2[j] + s3[k])+1] += p;
}
}
}
위 코드를 3번 반복하여 1,2,3,4,... 배열을 저장하였고, 아래 코드를 통해 합의 수들을 저장하였다.
그러나 위 코드를 통해 배열을 저장하고, 또 합의 배열을 저장할 필요 없이 하나의 삼중 for문만을 이용하여 똑같은 동작을 수행할 수 있다.
for(int i = 1; i<=a; i++){
for(int j=1; j<=b; j++){
for(int k = 1; k<=c; k++){
sum[i+j+k]++;
}
}
}
그럼 최종 코드를 확인해보겠다.
#include <stdio.h>
int main(void) {
int a, b, c, index, max = 0;
scanf("%d %d %d", &a, &b, &c);
int s1[41], s2[41], s3[41], sum[81] = { 0 };
//빈도 수 저장
for (int i = 1; i <= a; i++) {
for (int j = 1; j <= b; j++) {
for (int k = 1; k <= c; k++) {
sum[i + j + k]++;
}
}
}
for (int i = 0; i < 81; i++) {
if (max < sum[i]) {
max = sum[i];
index = i;
}
}
printf("%d", index);
return 0;
}
확실하게 간결해진 것을 볼 수 있다! 배고프당