코딩테스트/프로그래머스

[프로그래머스 Level2] 시소 짝꿍 - 파이썬(Python) - 연습문제

yejin72 2023. 1. 31. 14:09
728x90

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

 

프로그래머스

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

programmers.co.kr

문제 설명

어느 공원 놀이터에는 시소가 하나 설치되어 있습니다. 이 시소는 중심으로부터 2(m), 3(m), 4(m) 거리의 지점에 좌석이 하나씩 있습니다.
이 시소를 두 명이 마주 보고 탄다고 할 때, 시소가 평형인 상태에서 각각에 의해 시소에 걸리는 토크의 크기가 서로 상쇄되어 완전한 균형을 이룰 수 있다면 그 두 사람을 시소 짝꿍이라고 합니다. 즉, 탑승한 사람의 무게와 시소 축과 좌석 간의 거리의 곱이 양쪽 다 같다면 시소 짝꿍이라고 할 수 있습니다.
사람들의 몸무게 목록 weights이 주어질 때, 시소 짝꿍이 몇 쌍 존재하는지 구하여 return 하도록 solution 함수를 완성해주세요.

 

 


아래의 4가지 몸무게의 비율을 가지는 두 사람은 시소를 균형있게 탈 수 있다.

① 1:1  ② 2:3  ③ 1:2  ④ 3:4

 

 

  1. 몸무게와 해당 몸무게를 가진 사람의 수을 키와 값으로 갖는 딕셔너리 사용
  2. 한 사람의 몸무게가 w이라고 했을 때, 그 사람은 w, 2w, 1/2w, 2/3w, 3/2w, 4/3w, 3/4w의 몸무게를 지닌 사람들과 균형있게 시소를 탈 수 있다.
  3. 쌍을 이룰 수 있는 사람들의 수를 모두 더한 뒤, 자신의 몸무게도 딕셔너리에 체크

 

 

 << 전체 코드 >>

from collections import defaultdict

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

 

728x90