lecture/algorithm - c++
[c++] 봉우리, 각 행의 평균과 가장 가까운 값
tonirr
2020. 12. 29. 00:56
봉우리
#include <iostream>
#include <vector>
#include <algorithm>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int a[51][51];
int dx[4]={-1, 0, 1, 0};
int dy[4]={0, 1, 0, -1};
int main() {
//freopen("input.txt", "rt", stdin);
int n, i, j, k, cnt=0, tmp, flag;
scanf("%d", &n);
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
scanf("%d", &a[i][j]);
}
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
flag=0;
for(k=0; k<4; k++){
if(a[i][j]<=a[i+dx[k]][j+dy[k]]){
flag=1;
break;
}
}
if(flag==0) cnt++;
}
}
printf("%d ", cnt);
return 0;
}
내가 짰던 코드도 비슷하게 구성은 되어있다.
몰랐던 점은 a배열을 전역변수로 넣으면 0으로 자동으로 초기화된다는것
생각하지 못했던 점은 상하좌우로 봉우리값과 비교하면서 하나라도 크면 break시켜버리는 것
이렇게 처리하지 않아서 timelimit가 났었다.
채점해서 timelimit가 났다면 break를 활용해서 단축시킬 수 있는 포인트가 있는지 꼭 확인해봐야겠다.
각 행의 평균과 가장 가까운 값
#include <iostream>
#include <vector>
#include <algorithm>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int a[9][9];
int main() {
//freopen("input.txt", "rt", stdin);
int i, j, avg, tmp, min, val, sum, res;
for(i=1; i<=9; i++){
sum=0;
for(j=1; j<=9; j++){
scanf("%d", &tmp);
a[i][j] = tmp;
sum+= tmp;
}
avg=(sum/9.0)+0.5;
printf("%d ", avg);
min=2147000000;
for(j=1; j<=9; j++){
val=abs(a[i][j]-avg);
if(min>val){
min=val;
res=a[i][j];
}
else if(min==val){
if(res<a[i][j]) res=a[i][j];
}
}
printf("%d\n", res);
}
return 0;
}
avg를 구할 때 반올림 하는 법을 고민했다.
정수를 실수로 나누면 실수가 되며 0.5를 더하면 avg자체가 int로 되어있기 때문에 반올림되는 결과를 볼 수 있다.