문제 : https://www.acmicpc.net/problem/18248


[ 알고리즘풀이 ]

특정거리 R 이내에 있다면 종소리를 듣고, 아니면 못 들으므로

종 치는 곳을 원점이라 생각하고 반지름이 R인 원을 그린다고 생각하면 문제에 쉽게 접근할 수 있습니다.

반지름이 R1, R2 ( R1 < R2 ) 인 두 원이 있을 때, 사람 A와 B가 한 명은 R1 안에만 속하고 한 명은 R2 에만 속하는 경우는 불가능하고 나머지 경우는 모두 가능하므로 이 불가능한 경우만 check 해주면 된다.

#include<iostream>

using namespace std;

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

	int N, M, map[1000][100] = {};
	cin >> N >> M;	
	for (int i = 0; i < N; i++)
		for (int j = 0; j < M; j++)
			cin >> map[i][j];

	for (int i = 0; i < N; i++) {
		for (int j = i + 1; j < N; j++) {
			bool c1 = false, c2 = false;
			for (int k = 0; k < M; k++){
				if (map[i][k] == 1 && map[j][k] == 0)
					c1 = true;
				if (map[i][k] == 0 && map[j][k] == 1)
					c2 = true;
				if (c1 && c2) {
					cout << "NO";
					return 0;
				}
			}

		}
	}
	cout << "YES";
	return 0;
}

 

+ Recent posts