A, B 두 사람이 볼링을 치고 있다.
두 사람은 서로 무게가 다른 볼링공을 고르려고 한다.
볼링공은 총 N개가 있으며 각 볼링공마다 무게가 적혀 있고, 공의 번호는 1번부터 순서대로 부여된다. 또한 같은 무게의 공이 여러 개 있을 수 있지만, 서로 다른 공으로 간주한다.
볼링공의 무게는 1~M까지의 자연수 형태로 존재한다.
N = 5, M = 3이며 무게가 1, 3, 2, 3, 2일 때 각 공의 번호가 차례대로 1, 2, 3, 4, 5번으로 부여된다. 이때 두 사람이 고를 수 있는 볼링공의 조합을 구하면, 아래와 같다.
(1번, 2번), (1번, 3번), (1번, 4번), (1번, 5번), (2번, 3번), (2번, 5번), (3번, 4번), (4번, 5번)
두 사람이 공을 고를 수 있는 경우의 수는 8가지이다.
첫째 줄에 볼링공의 개수 N, 공의 최대 무게 M이 공백으로 구분되어 각각 자연수 형태로 주어진다
1 <= N <= 1,000
1 <= M <= 10
둘째 줄에 각 볼링공의 무게 K가 공백으로 구분되어 순서대로 자연수 형태로 주어진다.
1 <= K <= M
첫번째 줄에 두 사람이 볼링공을 고르는 경우의 수를 출력하라.
from itertools import combinations
n,m = map(int, input().split())
s = list(map(int,input().split()))
combi = list(combinations(s, 2))
res = len(combi)
# #중복 없애기
# new_s = list(set(s))
# res = res-len(s)+len(new_s)
# print(res)
for i in combi:
A, B = i
if A == B:
res -= 1
print(res)
버스에서 브레인스토밍 했다
대충 이런 느낌이었는데 중복된 걸 뺄때 어떻게 해야하나 두 가지 정도 생각했음
1. combination끝나고 (2,2) 이런 애들을 제거하기
2. 처음에 입력받은 리스트에서 1, 1, 2, 2, 3이라면 (1, 1)과 (2, 2)가 짝이 맞으니까 제거하기
근데 생각해보니까 2번이 더 쉬울 것 같아서 2번으로 했었는데
다시 생각해보니까 반례
입력: 1, 1, 1, 2, 3
인 경우에는 틀림
그래서 다시 1번 방법으로 생각했다.
이번건 아이디어는 생각이 났었는데 실현도 괜찮게 시켰는데 그냥 답지랑 답이 달라서 찝찝할 뿐...