티스토리 뷰

봉우리

#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로 되어있기 때문에 반올림되는 결과를 볼 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함