일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 소스코드
- 저지시스템구축
- SW Expert Academy
- 온라인 저지 구축
- oj구축
- 삼성
- 삼성기출
- STL
- 역량테스트
- 7576
- 역테
- 비트마스킹
- 모의 SW 역량테스트
- 개발
- oj
- SWIFT
- 구축
- 백준
- 온라인저지시스템구축
- IOS
- hustoj
- 모의 SW역량테스트
- xcode
- 알고리즘
- SWEA
- 풀이
- c++
- SW역량테스트
- BOJ
- a형
Archives
- Today
- Total
꾸르꾸르
[BOJ] 14500번 테트로미노 문제풀이 (C++) 본문
2017.10.4 에 작성된 글입니다.
문제링크
https://www.acmicpc.net/problem/14500
14500번: 테트로미노
폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누
www.acmicpc.net
풀이방법
답은 하드 코딩
그냥 시키는대로 하면 됩니다.
테트리스 모양 모두 만들어서 돌려주면 됨
소스 코드
#include <iostream>
using namespace std;
int map[505][505] = { 0 };
int max(int a, int b)
{
return a > b ? a : b;
}
int Check(int cur_x, int cur_y)
{
int max_value = 0;
//ㅁㅁㅁㅁ
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x][cur_y + 2] + map[cur_x][cur_y + 3]);//가로
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x + 2][cur_y] + map[cur_x + 3][cur_y]);//세로
//ㅁㅁ
//ㅁㅁ
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x][cur_y + 1] + map[cur_x + 1][cur_y + 1]);//네모
//ㅁㅁㅁ
//ㅁ
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x][cur_y + 1] + map[cur_x][cur_y + 2]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x][cur_y + 2] + map[cur_x - 1][cur_y + 2]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x + 2][cur_y] + map[cur_x + 2][cur_y + 1]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x + 1][cur_y + 1] + map[cur_x + 2][cur_y + 1]);
//ㅁㅁㅁ
// ㅁ
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x][cur_y + 2] + map[cur_x + 1][cur_y + 2]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x + 2][cur_y] + map[cur_x + 2][cur_y - 1]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x + 1][cur_y + 1] + map[cur_x + 1][cur_y + 2]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x + 1][cur_y] + map[cur_x + 2][cur_y]);
// ㅁㅁ
//ㅁㅁ
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x + 1][cur_y] + map[cur_x + 1][cur_y - 1]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x + 1][cur_y + 1] + map[cur_x + 2][cur_y + 1]);
//ㅁㅁ
// ㅁㅁ
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x + 1][cur_y + 1] + map[cur_x + 1][cur_y + 2]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x + 1][cur_y] + map[cur_x + 1][cur_y - 1] + map[cur_x + 2][cur_y - 1]);
// ㅁ
//ㅁㅁㅁ
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x - 1][cur_y] + map[cur_x][cur_y - 1] + map[cur_x][cur_y + 1]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x - 1][cur_y] + map[cur_x + 1][cur_y] + map[cur_x][cur_y + 1]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x][cur_y + 1] + map[cur_x][cur_y - 1] + map[cur_x + 1][cur_y]);
max_value = max(max_value, map[cur_x][cur_y] + map[cur_x - 1][cur_y] + map[cur_x + 1][cur_y] + map[cur_x][cur_y - 1]);
return max_value;
}
int main()
{
int N, M;
int Answer = 0;
cin >> N >> M;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M; j++)
cin >> map[i][j];
//배열의 각 해당점에서 모든 도형의 넓이 체크
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M; j++)//
Answer = max(Answer, Check(i, j));//제일 큰값을 출력
cout << Answer << endl;
return 0;
}
참고
해당 문제는 2017년 상반기에 출제된 문제.
퇴사와 함께 나왔습니다.
'코딩, 알고리즘, 문제풀이 > BOJ 백준' 카테고리의 다른 글
[BOJ] 14503번 로봇 청소기 문제풀이 (C++) (0) | 2019.05.17 |
---|---|
[BOJ] 14502번 연구소 문제풀이 (C++) (0) | 2019.05.16 |
[BOJ] 14499번 주사위 굴리기 풀이 (C++) (0) | 2019.05.13 |
[BOJ] 13458번 시험감독 풀이 (C++) (0) | 2019.05.13 |
[BOJ] 14501번 퇴사 문제풀이 (C++) (0) | 2019.05.11 |
Comments