프로그래머스 / 시소 짝궁 / python

맹민재·2023년 4월 19일
0

알고리즘

목록 보기
76/134

시간 초과코드

def solution(weights):
    answer = 0
    weights.sort()
    
    for i in range(len(weights)):
        for j in range(i+1, len(weights)):
            if weights[i] == weights[j]:
                answer += 1
            elif weights[i] * 2 == weights[j]:
                answer += 1
            elif weights[i] * 2 > weights[j]:
                if weights[i] * 3 == weights[j] * 2:
                    answer += 1
                if weights[i] * 4 == weights[j] * 3:
                    answer += 1
                
    return answer
def solution(weights):
    answer = 0
    d = dict()
    for w in weights:
        if w in d:
            d[w] += 1
        else:
            d[w] = 1
    
    for w in d.keys():
        if d[w] >= 2:
            answer += d[w] * (d[w] -1) // 2
        if w * 2 in d:
            answer += d[w] * d[w*2]
        if w * 3/2 in d:
            answer += d[w] * d[w*3/2]
        if w * 4/3 in d:
            answer += d[w] * d[w*4/3]
    
    return answer

이 문제는 딕셔너리를 통해 구할 수 있다.

주어진 weights를 순회하면서 중복 값이 나오면 +1 해주면서 정보를 저장해간다.

그 후 key 값을 순회하면서 수평에 맞는 조건을 통해 answer를 구할 수 있다.


스스로 풀지 못 한 문제 아직은 이 문제처럼 알고리즘 보다는 수학적 사고가 요구되는 문제엔 익숙하지 않다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글