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) 거리에 마주 보고 앉으면 균형을 이룹니다.
- aN이 2m에 앉았을 때 균형을 이루는 상황
- 반대쪽 2m에 aN이 앉을 때
- 반대쪽 3m에 aN*(2/3)이 앉을 때
- 반대쪽 4m에 aN*(2/4)이 앉을 때
- aN이 3m에 앉았을 때 균형을 이루는 상황
- 반대쪽 2m에 aN*(3/2)이 앉을 때
- 반대쪽 3m에 aN이 앉을 때
- 반대쪽 4m에 aN*(3/4)이 앉을 때
- aN이 4m에 앉았을 때 균형을 이루는 상황
- 반대쪽 2m에 aN*(4/2)이 앉을 때
- 반대쪽 3m에 aN*(4/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