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

lhs's avatar
Jan 03, 2025
[프로그래머스] 시소 짝꿍(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

LHS's Study Space