/*
#include <stdio.h>
typedef struct
{
char name[10]; // 이름 선언
double a, b, c, sum; // 언어, 수리, 컴퓨터, 최종 성적 선언
} student;
int main()
{
int i, j, total=0, n=0;
char filename[50]; // 파일명 선언
student *s, tmp; // 구조체와 변수 선언
FILE *fp;
printf("입력할 파일명을 입력하세요 : ");
// 한글이 깨져보이지 않기 위해 인코딩을 utf-8에서 ANSI로 변경함
gets(filename); // C:\Users\전유빈\Documents\codeblock\210403\score.txt 아니면 score.txt를 입력하기 (codeblocks가 아닌 프로그램 이용 시 score.txt 사용)
fp=fopen(filename, "r"); // 성적이 적혀있는 파일 열기
if(fp==NULL){ // 비어있으면 종료
printf("파일이 비어있습니다.");
return 0;
}
while(!feof(fp)){
fscanf(fp, "%s %lf %lf %lf", tmp.name, &tmp.a, &tmp.b, &tmp.c);
n++;
}
s=(student*)malloc(sizeof(student)*n);
fclose(fp);
fp=fopen(filename, "r");
for(i=0;i<n;i++){
fscanf(fp, "%s%lf%lf%lf", s[i].name, &s[i].a, &s[i].b, &s[i].c); // 구조체 입력
s[i].sum=s[i].a+s[i].b+s[i].c; // 성적의 총합
}
fclose(fp);
printf("\n┌──────────【 입력한 성적표 】───────────┐\n");
printf("│ 이름 언어 수리 컴퓨터 │\n");
for(i=0;i<n;i++){
printf("│ %s %7.1lf %7.1lf %7.1lf │\n", s[i].name, s[i].a, s[i].b, s[i].c); // 파일에 있는 것을 그대로 출력
}
printf("└────────────────────────────────────────┘\n\n");
printf("┏━━━━━━━━━━━━━━━━━━━━【 성적표 순위별 】━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 이 름 언어 수리 컴퓨터 총점 등수 ┃\n");
for(i=0;i<n;i++){ // 버블 정렬
for(j=0;j<n-i-1;j++){
if (s[j].sum<s[j+1].sum){
tmp=s[j];
s[j]=s[j+1];
s[j+1]=tmp;
}
}
}
for(i=0;i<n;i++){
printf("┣━━━━━━━━━━━━━─━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━─┫\n");
printf("┃ %s %7.1lf %7.1lf %7.1lf %9.1lf %6d ┃\n", s[i].name, s[i].a, s[i].b, s[i].c, s[i].sum, i+1); // 성적의 총합 순서대로 총합과 등수까지 출력
}
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
return 0;
}
*/
#include <stdio.h>
int m, n, cnt=0;
int arr[101][101]= {};
void dfs(int x, int y)
{
if(x>=0&&x<n&&y>=0&&y<m&&arr[x][y]==1)
{
/*
dfs(x+1, y);
dfs(x-1, y);
dfs(x, y+1);
dfs(x, y-1);
*/
// 상하좌우를 1로 바꿔줘야 함
arr[x+1][y]=1;
arr[x-1][y]=1;
arr[x][y+1]=1;
arr[x][y-1]=1;
cnt++; // 하루 끝날 때마다 1씩 더하기
}
}
int main()
{
int i, j, m, n;
scanf("%d %d", &m, &n);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
scanf("%d", &arr[i][j]);
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(arr[i][j]==1){
dfs(i, j);
}
else if(arr[i][j]!=0) { // 다 익었음
printf("0\n");
break;
}
else if(arr[i][j]!=1){ // 익은 게 없음
printf("-1\n");
break;
}
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("\n%d", cnt);
return 0;
}
데이터 한 줄 읽을 때마다 realloc해주기 vs file 두 번 읽어오기
=> 실행 시간 비교해보기!
free 꼭해주기
fp=fopen(filename, "r"); // 성적이 적혀있는 파일 열기
if(fp==NULL){ // 비어있으면 종료
printf("파일이 비어있습니다."); return 0;
}
s=(student*)malloc(sizeof(student));
while(!feof(fp)){
fscanf(fp, "%s%lf%lf%lf", s[n].name, &s[n].a, &s[n].b, &s[n].c); // 구조체 입력
s[n].sum=s[n].a+s[n].b+s[n].c; // 성적의 총합
n++;
realloc(s,sizeof(student)*n);
}
fclose(fp);
fp=fopen(filename, "r"); // 성적이 적혀있는 파일 열기
if(fp==NULL){ // 비어있으면 종료
printf("파일이 비어있습니다."); return 0;
}
s=(student*)malloc(sizeof(student));
while(!feof(fp)){
fscanf(fp, "%s%lf%lf%lf", s[n].name, &s[n].a, &s[n].b, &s[n].c); // 구조체 입력
s[n].sum=s[n].a+s[n].b+s[n].c; // 성적의 총합
n++;
realloc(s,sizeof(student)*n);
}
fclose(fp);
정우람 100.0 45.9 78.5
양현종 64.8 78.9 100.0
박해진 82.4 93.5 88.4
추신수 99.5 43.9 88.3
박찬호 100.0 99.9 78.5
이대호 88.9 99.9 78.9
강백호 85.4 78.6 31.5
이재학 82.4 93.6 78.4