[ 이코테 ] 볼링공 고르기 - 파이썬(Python)

싱가·2023년 3월 27일
0

문제

  • A와 B가 서로 무게가 다른 볼링공을 고른다.
  • 볼링공의 개수 N개
  • 공마다 무게가 적혀 있고, 1번부터 순서대로 부여
  • 같은 무게의 공이 여러 개 있지만, 서로 다른 공으로 간주한다.
  • 볼링공 무게는 1~M까지의 자연수 형태

입력 예시

1번)
5 3
1 3 2 3 2

2번)
8 5
1 5 4 3 2 4 5 2

출력 예시

1번)
8

2번)
25

예시 풀이

1번
(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (4, 5)

아이디어

  1. itertools의 combinations 조합을 이용하여 구하기
  2. 2중 for문 활용하기
  3. 책에서 제공하는 코드

코드 아이디어 1번

  • itertools.combinations 이용
  • 전체 조합 모두 생성 후, 서로 같은 수는 제거
from itertools import combinations

n, m = map(int, input().split())
kg = [0] * n
kg = list(map(int, input().split()))
cnt = 0

ball = list(combinations(kg, 2))

for i in combinations(kg, 2):
    if i[0] != i[1]:
        cnt += 1
        print(i)
        
print(cnt)

코드 아이디어 2번

  • 2중 for문 이용
  • 서로 다른 무게일 때만 계산
n, m = map(int, input().split())
ball = [0] * n
ball = list(map(int, input().split()))
cnt = 0

for i in range(n):
    for j in range(i + 1, n):
        if ball[i] != ball[j]:
            cnt += 1
            print(ball[i], ball[j])
            
print(cnt)

코드 아이디어 3번

  • 책에서 제공하는 코드
n, m = map(int, input().split())
ball = list(map(int, input().split()))

kg = [0] * 11
result = 0

for x in ball:
    kg[x] += 1

for i in range(1, m + 1):
    n -= kg[i]
    result += kg[i] * n
    
print(result)

문제를 보자마자 맨 처음 생각났던 아이디어가 itertools의 조합을 이용하여 계산한 후, 조건을 걸어주어 원하는 것을 출력하는 것이었다. 다른 방법으로도 풀어보고자 2중 for문을 사용하여 조합을 계산하게 되었다. 그러나 책에서 제공하는 코드는.. 이해가 잘 되지 않는다...

0개의 댓글