티스토리 뷰
영지선택 small
#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[6][51];
int main() {
freopen("input.txt", "rt", stdin);
int i, j, k, l, h, w, sh, sw, max=-2147000000, sum;
scanf("%d %d", &h, &w);
for(i=1; i<=h; i++){
for(j=1; j<=w; j++){
scanf("%d", &a[i][j]);
}
}
scanf("%d %d", &sh, &sw);
for(i=1; i<=h-sh+1; i++){
for(j=1; j<=w-sw+1; j++){
sum=0;
for(k=i; k<i+sh; k++){
for(l=j; l<j+sw; l++){
sum+=a[k][l];
}
}
if(sum>max) {
max=sum;
}
}
}
printf("%d", max);
return 0;
}
<배열다르게 선언한 것>
#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[6][51];
int main() {
//freopen("input.txt", "rt", stdin);
int i, j, k, l, h, w, sh, sw, max=-2147000000, sum;
scanf("%d %d", &h, &w);
vector<vector<int> > a(h+1, vector<int>(w+1, 0));
for(i=1; i<=h; i++){
for(j=1; j<=w; j++){
scanf("%d", &a[i][j]);
}
}
scanf("%d %d", &sh, &sw);
for(i=1; i<=h-sh+1; i++){
for(j=1; j<=w-sw+1; j++){
sum=0;
for(k=i; k<i+sh; k++){
for(l=j; l<j+sw; l++){
sum+=a[k][l];
}
}
if(sum>max) {
max=sum;
}
}
}
printf("%d", max);
return 0;
}
처음에 문제에서 배열의 개수를 잘못보아서(?)
배열을 작게 선언했다. 배열을 작게 선언하니 당연히 그 배열보다 큰 input이 들어오니 timelimit가 났다.
메모리가 상관없다면 차라리 vector로 선언해서 0으로 초기화 하는게 나을 수도 있겠다.
timelimit가 나면 배열의 크기도 살펴보자
영지선택 large
#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[6][51];
int main() {
//freopen("input.txt", "rt", stdin);
int i, j, k, l, h, w, sh, sw, max=-2147000000, sum;
scanf("%d %d", &h, &w);
vector<vector<int> > a(h+1, vector<int>(w+1, 0));
vector<vector<int> > dy(h+1, vector<int>(w+1, 0));
for(i=1; i<=h; i++){
for(j=1; j<=w; j++){
scanf("%d", &a[i][j]);
dy[i][j]=dy[i-1][j]+dy[i][j-1]-dy[i-1][j-1]+a[i][j];
}
}
scanf("%d %d", &sh, &sw);
for(i=sh; i<=h; i++){
for(j=sw; j<=w; j++){
sum=dy[i][j]-dy[i-sh][j]-dy[i][j-sw]+dy[i-sh][j-sw];
if(sum>max) {
max=sum;
}
sum=0;
}
}
printf("%d", max);
return 0;
}
'lecture > algorithm - c++' 카테고리의 다른 글
[c++] Ugly number(세 수 비교하기), K진수 출력(stack) (0) | 2020.12.31 |
---|---|
[c++] ++a, a++ 전위연산자, 후위연산자 예제 (0) | 2020.12.31 |
[c++] 블록의 최대값 (0) | 2020.12.29 |
[c++] 봉우리, 각 행의 평균과 가장 가까운 값 (0) | 2020.12.29 |
[c++] 공주구하기, 멀티 태스킹 (0) | 2020.12.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 클래스
- server side rendering
- 최단경로
- 인접리스트
- 배열
- 스텍
- C
- stackframe
- 운영체제
- 소프트웨어
- 병행프로세스
- 동적프로그래밍
- dfs
- Java
- 알고리즘
- 이진탐색
- 구조체
- 입출력장치
- BFS
- client side rendering
- 교착상태
- C++
- 재귀함수
- 자료구조
- 퀵정렬
- react
- javascript
- 인접행렬
- 세마포어
- Stack
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함