11-5. 볼링공 고르기 Python3

Yelim Kim·2022년 9월 16일
0

Python Algorithm Interview

목록 보기
36/36

Problem

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

출력 조건

첫번째 줄에 두 사람이 볼링공을 고르는 경우의 수를 출력하라.

My code

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)

Review

버스에서 브레인스토밍 했다

대충 이런 느낌이었는데 중복된 걸 뺄때 어떻게 해야하나 두 가지 정도 생각했음
1. combination끝나고 (2,2) 이런 애들을 제거하기
2. 처음에 입력받은 리스트에서 1, 1, 2, 2, 3이라면 (1, 1)과 (2, 2)가 짝이 맞으니까 제거하기
근데 생각해보니까 2번이 더 쉬울 것 같아서 2번으로 했었는데
다시 생각해보니까 반례

입력: 1, 1, 1, 2, 3

인 경우에는 틀림
그래서 다시 1번 방법으로 생각했다.

이번건 아이디어는 생각이 났었는데 실현도 괜찮게 시켰는데 그냥 답지랑 답이 달라서 찝찝할 뿐...

profile
뜬금없지만 세계여행이 꿈입니다.

0개의 댓글