AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 연습문제
  • 백준
  • 알고리즘
  • Python
  • level1
  • OpenCV
  • LEVEL2
  • 파이썬
  • 이코테
  • 프로그래머스

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

알고리즘/기타 알고리즘

[그리디 Greedy] 볼링공 고르기

2022. 1. 24. 22:11

문제

A, B 두 사람이 볼링을 치고 있다. 두 사람은 무게가 서로 무게가 다른 공을 고르려고 한다.

볼링공은 총 N개 있으며 각 볼링공마다 무게가 적혀있고, 공의 번호는 1번부터 순서대로 부여된다.

또한 같은 무게의 공이 여러 개 있을 수 있지만, 서로 다른 공으로 간주한다.

볼링공의 무게는 1부터 M까지의 자연수 형태로 존재한다.


N개의 공의 무게가 각각 주어질 때, 두 사람이 볼링공을 고르는 경우의 수를 구하는 프로그램을 작성하시오.

단, (1번공, 2번공)과 (2번공, 1번공)은 같은 경우로 간주한다.

 

 

입력 조건

  • 첫째 줄에 볼링공의 개수 N, 공의 최대 무게 M이 공백으로 구분되어 자연수 형태로 주어진다. (1<=N<=1,000, 1<=M<=10)
  • 둘째 줄에 각 볼링공의 무게 K가 공백으로 구분되어 순서대로 자연수 형태로 주어진다.(1<=K<=M)

 

출력 조건

  • 첫째 줄에 두 사람이 볼링공을 고르는 경우의 수를 출력한다.

 

입력 예시

더보기

5 3

1 3 2 3 2

 

출력 예시

더보기

8

 


✔ Solution - dictionary 이용

n, m = map(int, input().split())
weight = list(map(int, input().split()))

dic = {} # key = weight, value = 볼링공의 수
for i in range(m):
    dic[i + 1] = weight.count(i + 1)

result = 0

for i in range(1, m + 1):
    # 무게가 i인 공의 개수를 제외
    n -= dic[i]
    # 다른 사람이 고를 수 있는 공의 수와 곱해줌
    result += dic[i] * n
    
print(result)

 

⭐ 문제 포인트

  1. 무게가 다른 볼링공을 골라야 한다.
  2. 무게마다 몇개의 볼링공이 존재하는지 저장해준다.
  3. A가 먼저 볼링공을 선택했을 때, B가 다른 공을 고를 경우를 고려한다.
  4. 이미 계산한 조합은 제외를 해야한다.

 

✔ Solution 2 - 계수 정렬 이용

n, m = map(int, input().split())
weight = list(map(int, input().split()))

# 볼링공의 무게에 해당하는 공의 수를 넣어줄 리스트
weight_count = [0] * 11

for i in weight:
    # 볼링공의 무게에 해당하는 공의 수를 담아준다.
    weight_count[i] += 1

result = 0

for i in range(1, m + 1):
    # 무게가 i인 공의 개수를 제외
    n -= weight_count[i]
    # 다른 사람이 고를 수 있는 공의 수와 곱해줌
    result += weight_count[i] * n
    
print(result)

 

 

✔ Solution 3 - combinations 모듈 사용

from itertools import combinations

n, m = map(int, input().split())
weight = list(map(int, input().split()))

result = 0
# 볼링공의 무게가 다를때의 조합
for a, b in combinations(weight, 2):
    if a != b:
        result += 1

print(result)

 

⭐ 문제 포인트

  1. python의 combinations를 이용하여 조합을 구한다.
  2. 조합을 구할 때, A와 B가 갖는 볼링공의 무게가 다르다는 조건을 넣어준다.
  3. 조합이 다를 경우, 결과값에 1을 더해주는 과정을 시행한다.

 

'알고리즘 > 기타 알고리즘' 카테고리의 다른 글

[이것이 코딩 테스트다 with Python] 문자열 재정렬  (0) 2022.01.24
[Python] permutation, combination 순열과 조합  (0) 2022.01.24
[그리디 Greedy] 곱하기 혹은 더하기  (0) 2022.01.24
[그리디 Greedy] 문자열 뒤집기  (0) 2022.01.24
[그리디 Greedy] 모험가 길드  (0) 2022.01.24
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바