BruteForce_07_한윤정이 이탈리아에 가서 아이스크림을 사먹는데(2422)

Eugenius1st·2022년 5월 23일
0

Algorithm_Baekjoon

목록 보기
117/158

BruteForce07한윤정이 이탈리아에 가서 아이스크림을 사먹는데(2422)

문제

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

입력

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

출력

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

풀이

  • 초기 answer 값은 nC3을 수로 나타낸 것이다.
  • nomat 리스트에는 각 맛 별로 조합이 좋지 않은 맛을 넣는다.
  • 2 가지가 정해진 상황에서 나머지 한 가지 맛을 고르는 경우의 수는 n - 2 이다.
  • 그 전에 경우의 수에서 없앤 경우의 수는 합집합의 길이가 된다.

코드

n, m = map(int,input().split())
# n은 아이스크림 종류, m은 조합 개수
# 3가지 아이스크림을 선택해야 한다.
IceCream = n*(n-1)*(n-2) // 6
ch = [set() for _ in range(n)]
# set 함수는 "중복 삭제 기능" 
# set에 값 추가할때는 add 명령어 사용, 여러개 값을 추가할때는 update 명령어 사용

for i in range(m):
    a, b = map(int,input().split())
    print(len(ch[a-1] | ch[b-1]))
    IceCream -= (n-2) - len(ch[a-1] | ch[b-1])
    ch[a-1].add(b)
    ch[b-1].add(a)
    print(ch)
print(IceCream)

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글