inblog logo
|
LHS's Study Space
    알고리즘문제풀기프로그래머스

    [프로그래머스] 시소 짝꿍(152996)

    lhs's avatar
    lhs
    Jan 03, 2025
    [프로그래머스] 시소 짝꿍(152996)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/152996
     

    1. 문제 풀이 아이디어

    • 몸무게 목록의 범위가 좁은 점을 활용하여, 배열에 각 몸무게의 중복 개수를 저장해 문제를 해결한다.

    2. 나의 정답 코드

    class Solution { public long solution(int[] weights) { long answer = 0; Set<Integer> set = new TreeSet<>(); long[] w = new long[1001]; for (int i = 0; i < weights.length; i++) { set.add(weights[i]); w[weights[i]]++; } for (int i : set) { answer += w[i] * (w[i] - 1) / 2; if (i * 4 / 3 > 1000) continue; if (i % 3 == 0) answer += w[i] * w[i * 4 / 3]; if (i * 3 / 2 > 1000) continue; if (i % 2 == 0) answer += w[i] * w[i * 3 / 2]; if (i * 2 > 1000) continue; answer += w[i] * w[i * 2]; } return answer; } }

    3. 정리

    • weights 배열을 순회하며 set에 고유한 몸무게를 저장하고, w 배열에서 해당 몸무게의 개수를 증가시킨다.
    • set을 순회하며 동일한 몸무게 짝궁, 그리고 비율이 4:3, 3:2, 2:1인 짝궁의 경우의 수를 계산하여 answer에 더한다.
    • 범위를 초과하는 경우를 미리 검사해 효율적으로 처리한다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog