728x90
반응형
https://www.acmicpc.net/problem/18869
18869번: 멀티버스 Ⅱ
M개의 우주가 있고, 각 우주에는 1부터 N까지 번호가 매겨진 행성이 N개 있다. 행성의 크기를 알고 있을때, 균등한 우주의 쌍이 몇 개인지 구해보려고 한다. 구성이 같은데 순서만 다른 우주의 쌍
www.acmicpc.net
문제 해결
- 각 우주안에서 몇 번째로 큰 수인지를 알 수 있다면 비교하기 쉬울 것이다.
- 각 우주의 행성을 리스트안에 넣은 것을 A라하고 각 행성의 크기 등수를 적은 리스트를 B라 하면 f:A→B 는 일대일 대응이므로 바꿔서 계산해도 문제 없다.
- defaultdict 딕셔너리를 이용해 B가 같은 것들의 우주의 개수를 value로 하여 균등한 우주의 쌍을 계산할 수 있다. ( S[B] = n이라면 $ n \choose 2 $로 균등한 우주쌍을 구할 수 있다.)
CODE
import sys
input = sys.stdin.readline
from collections import defaultdict
m, n = map(int, input().split())
S = defaultdict(int)
for _ in range(m):
planet = list(map(int, input().split()))
sortedplanet = sorted(list(set(planet))) # 일대일 대응 함수 공역 만들기
ranked = {sortedplanet[i]: i for i in range(len(sortedplanet))}
vector = tuple([ranked[i] for i in planet])
S[vector] += 1
answer = 0
for i in S.values():
answer += (i*(i-1))//2
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 1727 커플 만들기 (0) | 2023.04.24 |
---|---|
[python] 백준 3151 합이 0 (0) | 2023.04.24 |
[python] 백준 6198 옥상 정원 꾸미기 (1) | 2023.04.23 |
[python] 백준 16401 과자 나눠주기 (0) | 2023.04.23 |
[python] 백준 2295 세 수의 합 (1) | 2023.04.23 |
댓글