처음 내가 한 말못된 풀이
나는 combination을 이용하엿으나 시간 초과가 난다....
이유는100.000이란 범위가 주어졌기 때문이다.
from itertools import combinations
def solution(weights):
combi = list(combinations(weights,2))
result = 0
for com in combi:
if com[0] == com[1]: result += 1
a = min(com[0],com[1])
b = max(com[0],com[1])
if b*2 == a*3:
result += 1
elif b*2 == a*4:
result += 1
elif b*3 == a*4:
result += 1
return result
정답
1. 모든 값을 Counter함수를 이용하여 분류하였다.
2. 분류한 값중 1이 넘는 것은 조합식을 이용하여 값을 더하였다.
(이유는 3일경우 3개를 섞어서 짝을 만들 수 있으니까 3C2)
3. 이제 중복된건 2번에서 해결하였으니까 set함수를 통해 list(weight)를 만들어 준다.
4. 이제 (3/4,2/3,2/4)라는 리스트(check)를 만들어 item *check 가 weight에 있는지 확인하고
4-1 확인했다면 아까 만든 카운트 함수에서 count[item *check] 와 count[item] 의 갯수를 가져와 곱한 후 결과값에 더한 다. (이유는 count에는 중복인 예를 들면 예시처럼 10같은게 있으니까 갯수를 곱하는게 맞음)
5. 결과값을 출력한다.
from collections import Counter
def solution(weights):
result = 0
count = Counter(weights)
for key in count:
if count[key] > 1:
result += (count[key])*(count[key]-1)//2
list1 = list(set(weights))
for li in list1:
for check in (2/4,3/4,2/3):
if li*check in list1:
result += count[li*check] * count[li]
return result
'코딩 테스트 > 코딩 테스트 - 문제' 카테고리의 다른 글
[프로그래머스] 징검다리 (0) | 2023.02.02 |
---|---|
[백준] 공유기 설치 (0) | 2023.02.02 |
[백준]평범한 배낭 (0) | 2023.02.02 |
[프로그래머스] 표 병합 (0) | 2023.02.01 |
[프로그래머스] 택배 배달과 수거하기 (0) | 2023.02.01 |