2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번
www.acmicpc.net
문제
한윤정과 친구들은 이탈리아로 방학 여행을 갔다. 이탈리아는 덥다. 윤정이와 친구들은 아이스크림을 사먹기로 했다. 아이스크림 가게에는 N종류의 아이스크림이 있다. 모든 아이스크림은 1부터 N까지 번호가 매겨져있다. 어떤 종류의 아이스크림을 함께먹으면, 맛이 아주 형편없어진다. 따라서 윤정이는 이러한 경우를 피하면서 아이스크림을 3가지 선택하려고 한다. 이때, 선택하는 방법이 몇 가지인지 구하려고 한다.
입력
첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번 이상 나오지 않는다. (1 ≤ N ≤ 200, 0 ≤ M ≤ 10,000)
출력
첫째 줄에, 가능한 방법이 총 몇 개 있는지 출력한다.
코드
import sys
input = sys.stdin.readline
from math import factorial
n, m = map(int, input().split())
total = factorial(n) // (factorial(n-3) * factorial(3))
bad_comb = set()
for _ in range(m):
a, b = map(int, input().split())
for i in range(1, n+1):
if i == a or i == b:
continue
bad_comb.add(tuple(sorted([a,b,i])))
print(total-len(bad_comb))
입력으로 주어지는 값들이 크지 않기 때문에 완전탐색으로 해결할 수 있는 문제였다.
먹을 수 없는 조합들을 bad_comb라는 집합에 모두 저장한 뒤 전체 가능한 조합의 개수(total)에서 bad_comb의 길이를 빼준다.
'문제풀이 > 완전탐색' 카테고리의 다른 글
[Python/파이썬] 백준 15661번 링크와 스타트 (0) | 2023.03.02 |
---|---|
[Python/파이썬] 백준 2615번 오목 (0) | 2023.03.01 |
[Python/파이썬] 백준 2961번 도영이가 만든 맛있는 음식 (0) | 2023.03.01 |
[Python/파이썬] 백준 14620번 꽃길 (0) | 2023.03.01 |
[Python/파이썬] 백준 2798번 블랙잭 (0) | 2023.02.28 |
2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번
www.acmicpc.net
문제
한윤정과 친구들은 이탈리아로 방학 여행을 갔다. 이탈리아는 덥다. 윤정이와 친구들은 아이스크림을 사먹기로 했다. 아이스크림 가게에는 N종류의 아이스크림이 있다. 모든 아이스크림은 1부터 N까지 번호가 매겨져있다. 어떤 종류의 아이스크림을 함께먹으면, 맛이 아주 형편없어진다. 따라서 윤정이는 이러한 경우를 피하면서 아이스크림을 3가지 선택하려고 한다. 이때, 선택하는 방법이 몇 가지인지 구하려고 한다.
입력
첫째 줄에 정수 N과 M이 주어진다. N은 아이스크림 종류의 수이고, M은 섞어먹으면 안 되는 조합의 개수이다. 아래 M개의 줄에는 섞어먹으면 안 되는 조합의 번호가 주어진다. 같은 조합은 두 번 이상 나오지 않는다. (1 ≤ N ≤ 200, 0 ≤ M ≤ 10,000)
출력
첫째 줄에, 가능한 방법이 총 몇 개 있는지 출력한다.
코드
import sys input = sys.stdin.readline from math import factorial n, m = map(int, input().split()) total = factorial(n) // (factorial(n-3) * factorial(3)) bad_comb = set() for _ in range(m): a, b = map(int, input().split()) for i in range(1, n+1): if i == a or i == b: continue bad_comb.add(tuple(sorted([a,b,i]))) print(total-len(bad_comb))
입력으로 주어지는 값들이 크지 않기 때문에 완전탐색으로 해결할 수 있는 문제였다.
먹을 수 없는 조합들을 bad_comb라는 집합에 모두 저장한 뒤 전체 가능한 조합의 개수(total)에서 bad_comb의 길이를 빼준다.
'문제풀이 > 완전탐색' 카테고리의 다른 글
[Python/파이썬] 백준 15661번 링크와 스타트 (0) | 2023.03.02 |
---|---|
[Python/파이썬] 백준 2615번 오목 (0) | 2023.03.01 |
[Python/파이썬] 백준 2961번 도영이가 만든 맛있는 음식 (0) | 2023.03.01 |
[Python/파이썬] 백준 14620번 꽃길 (0) | 2023.03.01 |
[Python/파이썬] 백준 2798번 블랙잭 (0) | 2023.02.28 |