본문 바로가기

Algorithm

백준 2422번 한윤정이 이탈리아에 가서 아이스크림을 사먹는데

반응형

문제

한윤정과 친구들은 이탈리아로 방학 여행을 갔다. 이탈리아는 덥다. 윤정이와 친구들은 아이스크림을 사먹기로 했다. 아이스크림 가게에는 N종류의 아이스크림이 있다. 모든 아이스크림은 1부터 N까지 번호가 매겨져있다. 어떤 종류의 아이스크림을 함께먹으면, 맛이 아주 형편없어진다. 따라서 윤정이는 이러한 경우를 피하면서 아이스크림을 3가지 선택하려고 한다. 이때, 선택하는 방법이 몇 가지인지 구하려고 한다.

입력

첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번 이상 나오지 않는다. (1 ≤ N ≤ 200, 0 ≤ M ≤ 10,000)

출력

첫째 줄에, 가능한 방법이 총 몇 개 있는지 출력한다.

 

3개를 고르는 거라서 그냥 3중포문 브루트포스로 풀림..

다만 고르면 안되는 걸 벡터로 visit 처리하면 복잡해 지니 2중배열 쓰는 아이디어 생각하기!

그리고 a,b가 가능한 수라해서 b와 c만 가능 체크하면 a,b 가능 b,c 가능이지만 a,c가 아닌데도 a,b,c로 엮일 수 있으니

a,c도 확인 필수 

 

 

#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<string.h>
using namespace std;

int N, M;
bool visit[201][201];
vector<int> s;


int main(void)
{
	cin >> N >> M;

	for (int i = 0; i < M; i++)
	{
		int a, b;
		cin >> a >> b;
		visit[a][b] = true;
		visit[b][a] = true;
	}
	int res = 0;
	for (int i = 1; i <= N; i++)
	{
		for (int j = i + 1; j <= N; j++)
		{
			if (!visit[i][j])
			{
				for (int k = j + 1; k <= N; k++)
				{
					if (!visit[j][k] && !visit[i][k])
					{
						res++;
					}
				}
			}
		}
	}

	cout << res << endl;
}
반응형

'Algorithm' 카테고리의 다른 글

백준 2151번 거울 설치  (0) 2020.07.14
백준 4991번 로봇 청소기  (0) 2020.07.13
백준 17086번 아기 상어 2  (0) 2020.07.12
백준 14426번 접두사 찾기  (0) 2020.07.12
백준 14425번 문자열 집합  (0) 2020.07.10