inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

48. 각 행의 평균과 가장 가까운 값(2차원 배열 탐색)

48번 질문있습니다!

319

dongdong

작성한 질문수 5

0

#include <iostream>

using namespace std;

int a[9][9];

int b[9];

int main(){

freopen("input.txt","rt",stdin);

int i,j,max,rev=0,tmp=2147000000;

float x=0.0,sum=0.0;

int c[9];

for(i=0;i<9;i++){

for(j=0;j<9;j++){

cin>>a[i][j];

sum+=a[i][j];

}

b[i]=(sum/9.0)+0.5;

sum=0.0;

}

for(i=0;i<9;i++){

for(j=0;j<9;j++){

tmp=a[i][j]-b[i];

if(tmp<0){

tmp*=-1;

}

if(tmp<max){

max=tmp;

rev=a[i][j];

}

if(max==tmp){

if(rev<a[i][j]){

rev=a[i][j];

}

}

}

c[i]=rev;

max=2147000000;

}

for(i=0;i<9;i++){

cout<<b[i]<<' '<<c[i]<<endl;

}

return 0;

}

이렇게 짰을때 출력창에서 나머지는 다 똑같이 나오는데 첫번째 행의 평균과 가장 가까운수가 0이 나옵니다. 혹시 왜 이렇게 나오는지 알려주실 수 있나요...?

c++ 코딩-테스트

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

주어진 코드에서 문제가 있는 부분을 찾아볼게요.

첫째로, tmp 변수를 초기화하는 부분에서 문제가 있습니다. tmp 변수의 초기값을 2147000000으로 설정했는데, 이는 답이 될 수 있는 범위보다 큰 값입니다. 따라서 tmp 변수의 초기값을 첫 번째 입력값 a[0][0]의 차이로 설정해야 합니다.

둘째로, max 변수와 rev 변수의 위치가 잘못되어 있습니다. max 변수와 rev 변수를 초기화하는 부분을 첫 번째 반복문 바깥으로 이동해야 합니다. 그렇지 않으면 매 반복마다 max 변수가 초기화되기 때문에 잘못된 결과가 나옵니다.

수정된 코드를 아래에 보여드릴게요.

#include <iostream>
using namespace std;
int a[9][9];
int b[9];
int main() {
	freopen("input.txt", "rt", stdin);
	int i, j, rev = 0, tmp, max = 2147000000;
	float x = 0.0, sum = 0.0;
	int c[9];
	for (i = 0; i < 9; i++) {
		for (j = 0; j < 9; j++) {
			cin >> a[i][j];
			sum += a[i][j];
		}
		b[i] = (sum / 9.0) + 0.5;
		sum = 0.0;
	}

	for (i = 0; i < 9; i++) {
		tmp = a[i][0] - b[i];
		if (tmp < 0) {
			tmp *= -1;
		}
		max = tmp;
		rev = a[i][0];
		for (j = 1; j < 9; j++) {
			tmp = a[i][j] - b[i];
			if (tmp < 0) {
				tmp *= -1;
			}
			if (tmp < max) {
				max = tmp;
				rev = a[i][j];
			}
			if (max == tmp) {
				if (rev < a[i][j]) {
					rev = a[i][j];
				}
			}
		}
		c[i] = rev;
	}

	for (i = 0; i < 9; i++) {
		cout << b[i] << ' ' << c[i] << endl;
	}

	return 0;
}

위의 코드를 실행하면 첫 번째 행의 평균과 가장 가까운 수가 제대로 출력될 것입니다. 문제를 해결하는 데 도움이 되었기를 바랍니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요!

87번 채점 프로그램에 오류가 있는 것 같습니다.

0

89

2

그리디 파트

0

115

2

안녕하세요. 선생님(54번 코드 관련 문의)

0

141

2

테스트 파일 exit_coe_1, time_limit_exceeded 질문

0

143

1

C언어로 코드를 짜면 채점 시에 한 문제 빼고 시간 초과가 발생하는데 해결하는 방법이 있을까요?

0

172

1

19번 질문있습니다

0

123

1

6번 관련 채점오류입니다

0

88

2

22번 문제는 C로 풀어주신 건가요 C++로 풀어주신 건가요?

0

166

2

dev C++ 콘솔창 바로 닫힘

0

245

1

최신화하기

0

171

1

채점이 안되요...

1

261

1

안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.

0

113

1

45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?

0

155

1

39번 두 배열 합치기 문제 채점 오류인가 코드 오류인가

0

155

0

채점기에서 틀렸다고 나오는데 이유를 모르겠습니다.

0

149

2

해당 강의에서 C언어로만 진행하는 강의 문의 건

0

145

2

87번 문제 섬나라 아일랜드 질문

0

128

1

16번 문제에서 직접 답을 대입하면 정답이 나오는데 채점에서 wrong answer가 나옵니다.

0

149

1

40번 교집합 문제

0

166

1

43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.

0

170

1

41. 연속된 자연수의 합 문제 질문있습니다.

0

166

1

질문있습니다.

0

193

2

시간초과가 나요

0

172

1

43번 문제 3 ~ 5번에 문제가 있는것 같습니다.

0

249

1