for (auto& e: results) {
ret[e[0]][e[1]] = 1;
ret[e[1]][e[0]] = -1;
}
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (ret[i][k] == 1 && ret[k][j] == 1) {
ret[i][j] = 1;
ret[j][i] = -1;
}
if (ret[i][k] == -1 && ret[k][j] == -1) {
ret[i][j] = -1;
ret[j][i] = 1;
}
}
}
}
i가 k한테 이기고, k가 j에게도 이기면 i가 j를 이긴다는 것이다. 반대로 i가 k한테 지고, k가 j한테 지면 i는 j에게도 진다는 것이다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int ret[104][104];
int solution(int n, vector<vector<int>> results) {
for (auto& e: results) {
ret[e[0]][e[1]] = 1;
ret[e[1]][e[0]] = -1;
}
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (ret[i][k] == 1 && ret[k][j] == 1) {
ret[i][j] = 1;
ret[j][i] = -1;
}
if (ret[i][k] == -1 && ret[k][j] == -1) {
ret[i][j] = -1;
ret[j][i] = 1;
}
}
}
}
int ans = 0;
for (int i = 1; i <= n; ++i) {
int cnt = 0;
for (int j = 1; j <= n; ++j) {
if (ret[i][j]) ++cnt;
}
if (cnt == n - 1)
++ans;
}
return ans;
}
class Solution {
int[][] ret = new int[104][104];
public int solution(int n, int[][] results) {
for (var e : results) {
ret[e[0]][e[1]] = 1;
ret[e[1]][e[0]] = -1;
}
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (ret[i][k] == 1 && ret[k][j] == 1) {
ret[i][j] = 1;
ret[j][i] = -1;
}
if (ret[i][k] == -1 && ret[k][j] == -1) {
ret[i][j] = -1;
ret[j][i] = 1;
}
}
}
}
int ans = 0;
for (int i = 1; i <= n; ++i) {
int cnt = 0;
for (int j = 1; j <= n; ++j) {
if (ret[i][j] != 0) {
++cnt;
}
}
if (cnt == n - 1) {
++ans;
}
}
return ans;
}
}