본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

[pro] 프로그래머스 level2 152996 시소 짝꿍 (Java) - 구현

[문제]

https://school.programmers.co.kr/learn/courses/30/lessons/152996

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이]

오름차순 정렬을 했기 때문에 무게가 같은 경우와 (*4,*3), (*3, *2), (*4, *2) 경우에 대해서만 체크해준다. 또한 같은 무게인 경우 앞서 구한 count에서 1을 뺀 값을 그대로 활용할 수 있다. 시간초과가 나지 않기 위해서 필수적인 부분!

 

[코드]

 

import java.util.*;

class Solution {
    public long solution(int[] weights) {
        long answer = 0;
        // 시소 짝꿍이 몇 쌍 존재하는지 구하여 return 
        
        Arrays.sort(weights);
        
        int count = 0;
        for(int i=0; i<weights.length-1; i++){
            if(i>0){
                if(weights[i]==weights[i-1]){
                    count--;
                    answer += count;
                    continue;
                }
            }
            
            count = 0;
            
            for(int j=i+1; j<weights.length; j++){
                if(weights[i]==weights[j] || 
                   weights[i]*4==weights[j]*3 ||
                   weights[i]*3==weights[j]*2 ||
                   weights[i]*2==weights[j] ) {
                    count++;
                }
            }
            
            answer += count;
        }
        
        return answer;
    }
}