Coding Test/programmers

[Python] 파이썬 프로그래머스 시소 짝꿍

파송송 2023. 5. 4. 13:04
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/152996

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 풀이

시소가 설치되어 있고 중심으로부터 2(m), 3(m), 4(m) 거리의 지점에 좌석이 있다고 할 때 완전한 균형을 이루는 쌍이 몇 개가 존재하는지 구하는 문제이다.

[100,180,360,100,270] 4

{100, 100} 은 서로 같은 거리에 마주보고 앉으면 균형을 이룹니다.
{180, 360} 은 각각 4(m), 2(m) 거리에 마주 보고 앉으면 균형을 이룹니다.
{180, 270} 은 각각 3(m), 2(m) 거리에 마주 보고 앉으면 균형을 이룹니다.
{270, 360} 은 각각 4(m), 3(m) 거리에 마주 보고 앉으면 균형을 이룹니다.


  1.  aN이 2m에 앉았을 때 균형을 이루는 상황
    1. 반대쪽 2m에 aN이 앉을 때
    2. 반대쪽 3m에 aN*(2/3)이 앉을 때
    3. 반대쪽 4m에 aN*(2/4)이 앉을 때
  2.  aN이 3m에 앉았을 때 균형을 이루는 상황
    1. 반대쪽 2m에 aN*(3/2)이 앉을 때
    2. 반대쪽 3m에 aN이 앉을 때
    3. 반대쪽 4m에 aN*(3/4)이 앉을 때
  3.  aN이 4m에 앉았을 때 균형을 이루는 상황
    1. 반대쪽 2m에 aN*(4/2)이 앉을 때
    2. 반대쪽 3m에 aN*(4/3)이 앉을 때
    3. 반대쪽 4m에 aN이 앉을 때

중복된 경우를 제거하고 모든 경우를dict_weights[w]+dict_weights[w*2/3]+dict_weights[w*2/4]+dict_weights[w*3/2]+dict_weights[w*3/4]+dict_weights[w*4/2]+dict_weights[w*4/3]로 하여 답을 구함

from collections import defaultdict

def solution(weights):
    dict_weights = defaultdict(int)
    answer = 0
    for w in weights:
        answer += dict_weights[w]+dict_weights[w*2/3]+dict_weights[w*2/4]+dict_weights[w*3/2]+dict_weights[w*3/4]+dict_weights[w*4/2]+dict_weights[w*4/3]
        dict_weights[w] += 1

    return answer

728x90