본문 바로가기

알고리즘

[백준] 14754번 Pizza Boxes C++ 문제풀이

https://www.acmicpc.net/problem/14754

 

14754번: Pizza Boxes

Your program is to read from standard input. The input contains two integers, n and m (1 ≤ n, m ≤ 1,000), the number of rows and columns in the grid, respectively. Each of the following n lines contain m integers, the number of pizza boxes (heights) in

www.acmicpc.net

문제 풀이

이 문제를 보자마자 그냥 먼저 생각난게 각 행, 열 별로 최대값을 찾아서 표시해주자! 라고 생각을 했다.

티어가 실버 2 문제이길래 시간초과 뜰 줄 알았는데 맞더라... 뭐지...?

암튼 각 행,열 별로 max값을 찾고 bool 배열에 저장해준 뒤 나중에는 bool 배열이 false인 값을 최종값에 더해줬다.

소스 코드

#include <iostream>
using namespace std;

long long pizza[1001][1001] = { 0 };
bool pizza_max[1001][1001] = { false };

int main() {
	int row, col;
	cin >> row >> col;
	//값 입력
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			cin >> pizza[i][j];
		}
	}
	// row를 기준으로 최대값 탐색
	for (int i = 0; i < row; i++) {
		int max_idx = 0;
		long long max_col = 0;
		for (int j = 0; j < col; j++) {
			if (max_col < pizza[i][j]) {
				max_idx = j;
				max_col = pizza[i][j];
			}
		}
		pizza_max[i][max_idx] = true;
	}
	//col을 기준으로 최대값 탐색
	for (int j = 0; j < col; j++) {
		int max_idx = 0;
		long long max_col = 0;
		for (int i = 0; i < row; i++) {
			if (max_col < pizza[i][j]) {
				max_idx = i;
				max_col = pizza[i][j];
			}
		}
		pizza_max[max_idx][j] = true;
	}
	// false인 값들을 더해준다.
	long long max_result = 0;
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			if (pizza_max[i][j] == false) {
				max_result += pizza[i][j];
			}
		}
	}
	cout << max_result << '\n';
}