*문제 출처는 프로그래머스에 있습니다.
문제 제목: 시소 짝꿍 (2단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/152996
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명

나의 풀이
from collections import Counter
def solution(weights):
cnt = 0
weight_count=Counter(weights) # 무게별 개수 저장
for w, c in weight_count.items(): # 동일한 무게 쌍 처리
if c > 1:
cnt += c * (c - 1) // 2 # 조합으로 개수 더해주기
ratios=[(2, 3), (1, 2), (3, 4)] # 가능한 비율 쌍 탐색
for w in weights:
for a, b in ratios:
if (w * b) % a == 0: # 나누어떨어질 때만 탐색
target = (w * b) // a
if target in weight_count:
cnt += weight_count[target]
return cnt

1. Counter 활용 (무게별 개수 저장)
- Counter(weights)를 사용하여 각 무게별 개수를 저장한다.
- 예를 들어, weights = [100, 100, 200, 300]이라면
weight_count = {100: 2, 200: 1, 300: 1}가 됨.
2. 동일한 무게끼리 짝짓기
- 같은 무게를 가진 사람이 2명 이상이라면 그들끼리 조합을 만들 수 있음.
- 조합의 공식 nC2 = n(n-1)/2을 사용하여 가능한 쌍을 더함.
- 예를 들어, weight_count[100] = 2라면, 2C2 = 1쌍이 성립.
3. 서로 다른 무게끼리 비율 맞추기
- 가능한 비율: (2,3), (1,2), (3,4)를 탐색.
- 예를 들어, w = 100일 때:
- (2,3): 100 * 3 / 2 = 150, 즉 150kg을 가진 사람이 있으면 짝 가능.
- (1,2): 100 * 2 / 1 = 200, 즉 200kg을 가진 사람이 있으면 짝 가능.
- (3,4): 100 * 4 / 3 = 133.33 → 정수가 아니므로 불가능.
- 이와 같은 방식으로 가능한 쌍을 찾아 카운트함.
4. 최종 반환
return cnt
- 모든 가능한 경우의 수를 계산하여 반환.
※ 알아야 할 것
https://chyam-eun.tistory.com/269
[프로그래머스 Lv2,python] - 시소 짝꿍
https://school.programmers.co.kr/learn/courses/30/lessons/152996 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krfrom collections import Counter
chyam-eun.tistory.com
'Coding Test > 프로그래머스-Python' 카테고리의 다른 글
| Programmers / 서버 증설 횟수 / Python (0) | 2025.03.14 |
|---|---|
| Programmers / 스티커 모으기(2) / Python (1) | 2025.03.13 |
| Programmers/ [PCCP 모의고사 #1] 2번 - 체육대회 / Python (0) | 2025.02.28 |
| Programmers/ [PCCP 모의고사 #1] 1번 - 외톨이 알파벳 / Python (0) | 2025.02.28 |
| Programmers / 마법의 엘리베이터 / Python (2) | 2024.09.12 |