문제 간단 정리
구현문제이다
각 블럭들을 돌아가면서 조사하면 되는 간단한 구현문제지만
어떻게 구현하냐에 따라서 시간이 달라질것이다.
나는 그냥 모든 블럭들을 조회하는 무식한 방법으로 풀었다.
이렇게 풀면 오류도 많고 틀릴 가능성이 높으니
아마 각 블럭 모양을 만들고 회전시키는 방법이 가장 바람직하지 않을까 싶다
https://stack07142.tistory.com/299 예시
문제 해결 방법
#include<queue>
#include<deque>
#include <iostream>
using namespace std;
int main() {
int arr[100][100];
int count = 1;
while (1) {
int N; cin >> N;
if (!N) break;
//i 세로 j 가로
int temp = 0;
int max = -987654321;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> arr[i][j];
}
}
// ㅡ
for (int i = 0; i < N; i++) {
for (int j = 0; j < N - 3; j++) {
temp = 0;
temp = arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i][j + 3];
if (temp > max) max = temp;
}
}
// ㅣ
for (int i = 0; i < N - 3; i++) {
for (int j = 0; j < N; j++) {
temp = 0;
temp = arr[i][j] + arr[i + 1][j] + arr[i + 2][j] + arr[i + 3][j];
if (temp > max) max = temp;
}
}
//ㅓ
for (int i = 0; i < N - 2; i++) {
for (int j = 0; j < N - 1; j++) {
temp = 0;
temp = arr[i + 1][j] + arr[i + 1][j + 1] + arr[i][j + 1] + arr[i + 2][j + 1];
if (temp > max) max = temp;
}
}
//ㅗ
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 2; j++) {
temp = 0;
temp = arr[i + 1][j] + arr[i + 1][j + 1] + arr[i][j + 1] + arr[i + 1][j + 2];
if (temp > max) max = temp;
}
}
//ㅜ
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 2; j++) {
temp = 0;
temp = arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 1];
if (temp > max) max = temp;
}
}
//ㅏ
for (int i = 0; i < N - 2; i++) {
for (int j = 0; j < N - 1; j++) {
temp = 0;
temp = arr[i][j] + arr[i + 1][j] + arr[i + 2][j] + arr[i + 1][j + 1];
if (temp > max) max = temp;
}
}
//ㅁ
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
temp = 0;
temp = arr[i][j] + arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1];
if (temp > max) max = temp;
}
}
//ㅁㅁ
// ㅁㅁ
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 2; j++) {
temp = 0;
temp = arr[i][j] + arr[i][j + 1] + arr[i + 1][j + 1] + arr[i + 1][j + 2];
if (temp > max) max = temp;
}
}
// ㅁ
//ㅁㅁ
//ㅁ
for (int i = 0; i < N - 2; i++) {
for (int j = 0; j < N - 1; j++) {
temp = 0;
temp = arr[i][j+1] + arr[i + 1][j+1] + arr[i + 1][j] + arr[i +2][j];
if (temp > max) max = temp;
}
}
//ㅁㅁㅁ
// ㅁ
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 2; j++) {
temp = 0;
temp = arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 2];
if (temp > max) max = temp;
}
}
// ㅁ
// ㅁ
//ㅁㅁ
for (int i = 0; i < N - 2; i++) {
for (int j = 0; j < N - 1; j++) {
temp = 0;
temp = arr[i][j + 1] + arr[i + 1][j + 1] + arr[i + 2][j+1] + arr[i + 2][j];
if (temp > max) max = temp;
}
}
//ㅁ
//ㅁㅁㅁ
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 2; j++) {
temp = 0;
temp = arr[i][j] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 1][j + 2];
if (temp > max) max = temp;
}
}
//ㅁㅁ
//ㅁ
//ㅁ
for (int i = 0; i < N - 2; i++) {
for (int j = 0; j < N - 1; j++) {
temp = 0;
temp = arr[i][j + 1] + arr[i][j] + arr[i + 1][j] + arr[i + 2][j];
if (temp > max) max = temp;
}
}
cout << count << ". " << max << endl;
count++;
}
}
전체 코드
https://www.acmicpc.net/problem/4920
'[백준] > C++' 카테고리의 다른 글
백준 14246번 K보다 큰 구간 [C++] (0) | 2023.08.03 |
---|---|
백준 17352번 여러분의 다리가 되어 드리겠습니다! [C++] (0) | 2023.07.19 |
백준 11687번 팩토리얼 0의 개수 [C++] (0) | 2023.07.08 |
백준 13300번 방 배정 [C++] (0) | 2023.06.25 |
백준 9012번 괄호 [C++] (0) | 2023.06.25 |