※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 27101번 문제인 Metric Matrices이다.
문제는 아래 링크를 확인하자.

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

 

27101번: Metric Matrices

Given as input a square distance matrix, where a[i,j] is the distance between point i and point j, determine if the distance matrix is "a metric" or not. A distance matrix a[x,y] is a metric if and only if f(x,x) = 0 f(x,y) > 0 if x != y f(x,y) = f(y,x) f(

www.acmicpc.net

주어진 행렬이 metric matrix인지를 주어진 조건을 순서대로 만족하는지를 살펴보며 판단하는 문제이다.

 

주어지는 행렬의 크기가 충분히 작으므로, 각 조건을 차례대로 특별한 최적화 없이 직접적인 반복문을 돌며 확인하게끔 구현하는 것으로도 문제를 충분히 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

int N;
ll mat[30][30];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	for (int r = 0; r < N; r++) {
		for (int c = 0; c < N; c++) {
			cin >> mat[r][c];
		}
	}

	for (int n = 0; n < N; n++) {
		if (mat[n][n]) {
			cout << 1;
			return 0;
		}
	}

	for (int r = 0; r < N; r++) {
		for (int c = 0; c < N; c++) {
			if (r == c) continue;
			if (mat[r][c] <= 0) {
				cout << 2;
				return 0;
			}
		}
	}

	for (int r = 0; r < N; r++) {
		for (int c = r + 1; c < N; c++) {
			if (mat[r][c] != mat[c][r]) {
				cout << 3;
				return 0;
			}
		}
	}

	for (int x = 0; x < N; x++) {
		for (int y = 0; y < N; y++) {
			for (int z = 0; z < N; z++) {
				if (mat[x][y] + mat[y][z] < mat[x][z]) {
					cout << 4;
					return 0;
				}
			}
		}
	}

	cout << 0;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 7682 // C++] 틱택토  (0) 2023.01.04
[BOJ 5939 // C++] Race Results  (0) 2023.01.04
[BOJ 5938 // C++] Daisy Chains in the Field  (0) 2023.01.04
[BOJ 27106 // C++] Making Change  (0) 2023.01.03
[BOJ 17141 // C++] 연구소 2  (0) 2023.01.03

+ Recent posts