백준 14500 테트로미노

2021. 4. 26. 19:01· 알고리즘/백준(BOJ)
반응형

삼성 역량 기출문제 테트로미노 문제이다.

 

생각보다 쉬워서 놀랐고, 삼성 기출문제나 다른 코테 문제 수준이 딱 이 정도만 나오면 좋을 것 같단 생각이 들었다..

 

일단, tetromino라는 블록에 대한 배열을 다 만들었다.

5개의 블록을 회전 및 대칭을 시켰을 때 생성될 수 있는 경우는 총 19개가 된다.

그렇게 많지 않기 때문에 배열을 사용해서 19개의 모양을 나타내는 배열을 다 생성했다.

 

그리고 보드의 너비는 최대 500 x 500이지만, 만약 테트로미노가 겹쳐진다고 생각했을 때, 503까지 늘어날 수 있기 때문에 503 x 503의 사이즈로 생성해주었다.

 

그 다음으로는 너무 쉬웠다.

 

주어진 입력을 받아서 BOARD를 초기화하고, 좌상단에서 우하단까지 모든 좌표를 방문하면서 그 좌표 위에 올라갈 19개 테트로미노와 곱해준 뒤 가장 크게 계산되는 값을 반환해주고 출력해주면 끝이 난다.

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>
#include <stdlib.h>
#include <string.h>

using namespace std;

const int tetromino[19][4][4] = {
	{1, 1, 1, 1,
	 0, 0, 0, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 0, 0, 0,
	 1, 0, 0, 0,
	 1, 0, 0, 0,
	 1, 0, 0, 0},
	{1, 1, 0, 0,
	 1, 1, 0, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 0, 0, 0,
	 1, 0, 0, 0,
	 1, 1, 0, 0,
	 0, 0, 0, 0},
	{0, 0, 1, 0,
	 1, 1, 1, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 1, 0, 0,
	 0, 1, 0, 0,
	 0, 1, 0, 0,
	 0, 0, 0, 0},
	{1, 1, 1, 0,
	 1, 0, 0, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{0, 1, 0, 0,
	 0, 1, 0, 0,
	 1, 1, 0, 0,
	 0, 0, 0, 0},
	{1, 1, 1, 0,
	 0, 0, 1, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 1, 0, 0,
	 1, 0, 0, 0,
	 1, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 0, 0, 0,
	 1, 1, 1, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 0, 0, 0,
	 1, 1, 0, 0,
	 0, 1, 0, 0,
	 0, 0, 0, 0},
	{0, 1, 1, 0,
	 1, 1, 0, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{0, 1, 0, 0,
	 1, 1, 0, 0,
	 1, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 1, 0, 0,
	 0, 1, 1, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 1, 1, 0,
	 0, 1, 0, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{1, 0, 0, 0,
	 1, 1, 0, 0,
	 1, 0, 0, 0,
	 0, 0, 0, 0},
	{0, 1, 0, 0,
	 1, 1, 1, 0,
	 0, 0, 0, 0,
	 0, 0, 0, 0},
	{0, 1, 0, 0,
	 1, 1, 0, 0,
	 0, 1, 0, 0,
	 0, 0, 0, 0} };

int BOARD[503][503] = { 0, };

int multiply(int board_x, int board_y) {
	int res = 0;
	
	for (int t = 0; t < 19; ++t) {
		int temp_sum = 0;
		for (int y = 0; y < 4; ++y) {
			for (int x = 0; x < 4; ++x) {
				temp_sum += BOARD[board_y + y][board_x + x] * tetromino[t][y][x];
			}
		}

		if (temp_sum > res) {
			res = temp_sum;
		}
	}

	return res;
}

int main() {
	int N, M;
	scanf("%d %d", &N, &M);

	for (int y = 0; y < N; ++y) {
		for (int x = 0; x < M; ++x) {
			scanf("%d", &BOARD[y][x]);
		}
	}

	int max = 0;
	for (int y = 0; y < N; ++y) {
		for (int x = 0; x < M; ++x) {
			int temp = multiply(x, y);
			if (max < temp) {
				max = temp;
			}
		}
	}

	printf("%d", max);
	
	return 0;
}
반응형

'알고리즘 > 백준(BOJ)' 카테고리의 다른 글

백준 1708 볼록 껍질  (0) 2021.04.29
백준 11758 CCW  (0) 2021.04.28
백준 1697 숨바꼭질 C++  (0) 2021.04.20
백준 11653 소인수분해  (0) 2021.02.28
백준 2581 소수  (0) 2021.02.28
'알고리즘/백준(BOJ)' 카테고리의 다른 글
  • 백준 1708 볼록 껍질
  • 백준 11758 CCW
  • 백준 1697 숨바꼭질 C++
  • 백준 11653 소인수분해
오뚜깅
오뚜깅
오뚜깅
오뚜깅
오뚜깅
전체
오늘
어제
  • 분류 전체보기
    • 취업인생
    • Programming
      • C & C++
      • Python
      • OpenCV
      • PCL
      • ROS
      • Deep learning
      • Network
    • 알고리즘
      • 이론
      • 백준(BOJ)
      • 프로그래머스(Programmers)
    • Project
    • IT
      • 우분투
    • 일상
      • 말씀 묵상
      • 끄적임
      • 영어 일기

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • pytorch
  • cudaversion
  • installcuda
  • 2292
  • kmeansclustering
  • opencv
  • CUDA
  • graphicdriver
  • cuda9.0
  • C++
  • cv_bridge
  • DeepLearning
  • 백준2798
  • installubuntu
  • imageclustering
  • OtsuAlgorithm
  • cuda설치
  • tensorflowversion
  • 백준2231
  • PointCloudLibrary
  • 사용자지정정규화공식
  • rospy
  • CuDNN
  • c++code
  • pointcloud
  • installcudnn
  • 딥러닝환경구축
  • clustering
  • 우분투
  • 오츠알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
오뚜깅
백준 14500 테트로미노
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.