[프로그래머스] 시소 짝궁

2023. 2. 17. 03:15·PS/프로그래머스
반응형

코딩테스트 연습 - 시소 짝궁

문제 설명


def solution(weights: List[int]) -> int:
    ...

2(m), 3(m), 4(m) 거리의 지점에 좌석이 있는 시소가 평형이 되는 쌍의 갯수를 구하는 문제이다. solution 함수의 인자에 사람들의 몸무게 목록이 주어진다.

제한사항

  • 2 ≤ weights의 길이 ≤ 100,000
  • 100 ≤ weights[i] ≤ 1,000
    • 몸무게 단위는 N(뉴턴)으로 주어집니다.
    • 몸무게는 모두 정수입니다.

풀이

시소가 평형을 이루는지 확인하려면 두 사람의 무게와 각 좌석의 거리의 곱이 같은지 확인하면 된다. 이를 응용해서 몸무게1 / 몸무게2 == 거리2 / 거리1로 비율을 확인하면 된다. 문제에서 주어진 좌석의 거리는 2, 3, 4이다.

입력으로 주어지는 weights 배열의 최대 길이는 10만이기 때문에 이 배열에 대해 for문을 2중으로 사용하면 시간 초과가 발생한다. 반면 몸무게의 범위는 100 ~ 1000으로 길이가 더 짧다. 따라서 Counter를 사용해 weights의 각 원소에 대한 등장 횟수를 구하고 이를 순회해서 해결했다.

제출 코드

from collections import Counter
from typing import List

def solution(weights: List[int]) -> int:
    answer = 0
    weights.sort()

    weights_counter = Counter(weights)

    ratio = [1, 1 / 2, 2 / 3, 3 / 4]
    keys = list(weights_counter.keys())
    for i in range(len(keys)):
        weight_src = keys[i]
        answer += int((weights_counter[weight_src] * (weights_counter[weight_src] - 1)) / 2)
        for j in range(i + 1, len(keys)):
            weight_dest = keys[j]
            if weight_src / weight_dest in ratio:
                answer += weights_counter[weight_src] * weights_counter[weight_dest]
    return answer

후기

간단한 문제였지만 생각보다 코드를 복잡하게 구현했다. 다른 사람들의 풀이를 보니 훨씬 간단한 방법이 있었다. weight_counter[src]와 weight_counter[dst]를 비교하는 식이었지만, weight_counter[ratio]로 사람 수를 구하면 코드를 훨씬 직관적으로 작성할 수 있었다.

반응형
저작자표시 비영리 변경금지 (새창열림)
'PS/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 카드뭉치
  • [프로그래머스] 인사고과
  • [프로그래머스] 뒤에 있는 큰 수 찾기
  • [프로그래머스] 크기가 작은 부분 문자열
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • Spring Framework (10)
        • Spring (5)
        • JPA (3)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    딥러닝
    pytorch
    JavaScript
    알고리즘
    memcached
    MySQL
    PS
    Unreal Engine
    C++
    php
    파이썬
    NUXT
    FPS
    클래스
    게임
    JS
    게임 개발
    Python
    C
    웹
    select
    자바
    블루프린트
    redis
    언리얼엔진4
    mscoco
    Unreal
    map
    CPP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[프로그래머스] 시소 짝궁
상단으로

티스토리툴바