dntmdxor99   3년 전

안녕하세요..코딩 초보입니다..효율적이게 짜는 방법을 잘 몰라 일단 제가 아는 한에서만 짰습니다.

참고로 c99입니다.

맨 처음 n은 총 과목 갯수입니다.

그 다음 n2는 인원 수입니다.

*(p+i)의 마지막에는 평균을 저장하려고 4바이트만큼 추가했습니다.

그 후에 for문 반복으로 점수를 받게하고 전부 sum에 더했습니다.

그 다음 sum을 인원수로 나눈 다음 *(p+i)의 마지막에 저장했습니다.

그리고 *(p+i)의 마지막에 있는 평균보다 높은 인원이 있을때마다 count[i]를 1씩 더했습니다.

그리고 count에 count / 인원수 * 100을 다시 저장했습니다.

그 후에 count를 프린트하는 코드입니다.

참고로 그냥 휴대폰(백준x)으로 컴파일러 돌렸을때는 문제의 예시에 대한 출력이 다 맞았습니다..

컴퓨터는 쓰지못하는 관계로 폰으로 해서 디버그도 못해봤습니다.

#include <stdio.h>

int main()
{
int n; scanf("%d",&n); getchar();
int n2;
int **p = (int **)malloc(sizeof(int *) * n);
double *count = (double *)malloc(sizeof(double) * n);
for(int i = 0; i < n; i++)
{
count[i] = 0.0;
scanf("%d ",&n2);
*(p+i) = (int *)malloc(sizeof(int) * n2 + 4);
*(*(p+i)+n2) = 0;
int sum;
for(int j = 0; j < n2; j++)
{
scanf("%d",*(p+i)+j);
sum += *(*(p+i)+j);
}
*(*(p+i)+n2) = sum / n2;
for(int j = 0; j < n2; j++)
{
if(*(*(p+i)+n2) < *(*(p+i)+j))
{
count[i] += 1.0;
}
}

count[i] = (double)(count[i] / n2 * 100.0);
}
for(int i = 0; i < n; i++)
printf("%.3lf%%\n",count[i]);

return 0;
}

제가 다시 보고 고친 코드입니다. 이 코드는 맞았습니다.

제가 고친 곳은 sum에 0을 안 넣어서 넣었고, 바깥으로 변수를 옮겼습니다.

그리고 생각해보니 *(p+i)의 마지막에 굳이 평균을 저장하지 않고 sum을 이용하면 될거라 생각했습니다.

그리고 사실 귀찮아서 free하지않았는데, 이 코드에는 추가했습니다.

변수 부분을 수정하고, 제 생각에 그렇게 큰 부분을 수정했다고 생각하지않는데 위 코드는 왜 틀리고 아래 코드는 왜 맞은지 잘 모르겠습니다.

#include <stdio.h>

int main()
{
int n; scanf("%d",&n);
int n2,sum;
int **p = (int **)malloc(sizeof(int *) * n);
double *count = (double *)malloc(sizeof(double) * n);
for(int i = 0; i < n; i++)
{
count[i] = 0.0;
scanf("%d",&n2);
*(p+i) = (int *)malloc(sizeof(int) * n2);
sum = 0;
for(int j = 0; j < n2; j++)
{
scanf("%d",*(p+i)+j);
sum += *(*(p+i)+j);
}
for(int j = 0; j < n2; j++)
{
if(sum / n2 < *(*(p+i)+j))
{
count[i] += 1.0;
}
}
free(*(p+i));
count[i] = (double)(count[i] / n2 * 100.0);
}
for(int i = 0; i < n; i++)
printf("%.3lf%%\n",count[i]);
free(p);

return 0;
}

아직 코딩을 깨달은지 얼마 안 돼서 좀 불편하신 부분도 있을 거 같습니다.

그런 부분은 여지없이 지적과 충고 부탁드립니다!!

부탁드립니다..성장할 수 있는 기회를 주십시오..

엇 그리고 이제보니까 밑에 코드 적는 칸이 있는줄 몰랐습니다......

죄송합니다..

dntmdxor99   3년 전

아 맞다 그리구 위에 코드에 sum을 초기화 안 했는데, 신기하게도 폰으로 출력할때는 정상적으로 나왔습니다 ㅎㅎ;;;

이것도 왜 잘 나오는지 모르겠네요..

dntmdxor99   3년 전

하하;; 위에 코드에서 그냥 sum = 0; 으로 바꾸니까 해결됐네욤..

작은 틈새가 큰 건물 무너뜨린다는 좋은 교훈을 얻었습니다 ㅎㅎ!!!

근데 왜 Dcoder에서는 되지...;;

어쨋든 감사합니다. 혹시나 지적하거나 충고 주실 분들은 마음껏 주시면 감사하겠습니다!!!!

댓글을 작성하려면 로그인해야 합니다.