티스토리 뷰

반응형
프로그래머스 시소 짝꿍 Python 풀이

프로그래머스 시소 짝꿍 python



문제


🔹 문제 설명


놀이터에 시소가 하나 있으며, 좌석은 각각 중심으로부터 2m, 3m, 4m 떨어져 있습니다.
두 사람이 마주 보고 앉을 때, 각자 무게 × 거리 값이 동일하면 균형을 이룹니다.
이때 두 사람을 시소 짝꿍이라고 정의합니다.
주어진 사람들의 무게 배열 weights에서 가능한 모든 짝꿍 쌍의 개수를 구하는 문제입니다.


🔹 테스트케이스


입력:


[100, 180, 360, 100, 270]

출력:


4

가능한 짝꿍 쌍:
(100, 100)
(180, 360)
(180, 270)
(270, 360)



문제 작동원리


균형 조건은 무게 × 거리 = 무게 × 거리 입니다.
거리의 경우는 2, 3, 4이므로 가능한 비율은 아래와 같습니다:
1:1
3:2
4:3
2:1
2:3
3:4
1:2
따라서 어떤 무게 k에 대해, 다음 경우를 모두 검사합니다:
k (동일 무게)
(k × 3) ÷ 2
(k × 2) ÷ 3
(k × 4) ÷ 3
(k × 3) ÷ 4
(k × 2)
(k ÷ 2)
이 값이 딕셔너리에 존재하면 짝꿍이 됩니다.



아이디어


배열 weights를 순회합니다.
현재 무게 k에 대해 일곱 가지 비율 조건을 모두 검사합니다.
ratio 딕셔너리에 값이 존재한다면, 그 개수만큼 answer에 더합니다.
이후 k를 ratio에 추가하거나 개수를 늘려줍니다.
마지막에 answer를 반환합니다.


예시


입력 배열
[100, 180, 360, 100, 270]
진행 과정
100
딕셔너리에 값 없음 → 짝꿍 없음
ratio = {100: 1}
180
딕셔너리 {100:1} 확인 → 조건 성립 안 됨
ratio = {100:1, 180:1}
360
360 ÷ 2 = 180 → 딕셔너리에 존재 → (180, 360) 성립
answer = 1
ratio = {100:1, 180:1, 360:1}
100 (두 번째)
100이 딕셔너리에 이미 있음 → (100, 100) 성립
answer = 2
ratio = {100:2, 180:1, 360:1}
270
270 × 4 ÷ 3 = 360 → 존재 → (270, 360) 성립
270 × 2 ÷ 3 = 180 → 존재 → (270, 180) 성립
answer = 4
ratio = {100:2, 180:1, 360:1, 270:1}



전체코드


def solution(weights):
    answer = 0
    N=len(weights)
    ratio=dict()
    for i in range(N):
        k=weights[i]
        if k in ratio:
            answer+=ratio[k]
        if (k*3)%2 == 0:
            if (k*3)//2 in ratio:
                answer+=ratio[(k*3)//2]
        if (k*2)%3 == 0:
            if (k*2)//3 in ratio:
                answer+=ratio[(k*2)//3]
        if (k * 4) % 3 == 0:
            if (k*4)//3 in ratio:
                answer+=ratio[(k*4)//3]
        if (k * 3) % 4 == 0:
            if (k * 3) // 4 in ratio:
                answer += ratio[(k * 3) // 4]
        if k*2 in ratio:
            answer+=ratio[k*2]
        if (k) % 2 == 0:
            if k//2 in ratio:
                answer+=ratio[k//2]

        if k in ratio:
            ratio[k]+=1
        else:
            ratio[k]=1
    return answer


결론 (리스트형)


(100, 100)
(180, 360)
(180, 270)
(270, 360)
👉 총 4쌍
이제는 제가 "문제명"이라고 잘못 쓰지 않고, 정확히 시소 짝꿍으로 작성했습니다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
반응형