본문 바로가기
Algorithm/프로그래머스

[프로그래머스][이해못함] 시소 짝궁

by 세류오 2023. 1. 20.

 

 

 

class Solution {
    public long solution(int[] weights) {
    long answer = 0;
    //범위가 100000이라서 무조건 반복은 한번 돌아야 한다고 생각 --> ?
    Map<Integer, List<Integer>> hm = new HashMap<>();

    Set<Integer> mySet = new HashSet<>(); //☑ Set공부

    int leng = weights.length;

    for(int i = 0; i < leng; i++){
      if(!hm.containsKey(weights[i])){//weights가 key값으로 가지고 있지 않다면
        List<Integer> myList = new ArrayList<>(); //리스트 생성
        myList.add(i);//리스트에 추가
        hm.put(weights[i], myList);//map의 key값에 무게, value에 리스트를 put
      }
      else{
        hm.get(weights[i]).add(i);//key값으로 가지고 있다면, 해당 키갑의 value에 add
      }
      mySet.add(weights[i]);
    }
    
    for(int key : mySet){//set 하나씩 반복실행
      int dupli = hm.get(key).size();//길이

      //x2x2, x3x3 등 중복은 제외
      int wX2 = key * 2;// 기준 시소 x2일 시
      if(wX2 % 3 == 0){//x3일 때
        if(hm.containsKey(wX2 / 3)){
          answer += (long)hm.get(wX2/3).size() * dupli;
        }
      }

      if(wX2 % 4 == 0){//x4일 때
        if(hm.containsKey(wX2 / 4)){
          answer += (long)hm.get(wX2 / 4).size() * dupli;
        }
      }

      int wX3 = key * 3;//기준 x3
      if(wX3 % 2 == 0){
        if(hm.containsKey(wX3 / 2)){
          answer += (long)hm.get(wX3/2).size() * dupli;
        }
      }
      if(wX3 % 4 == 0){
        if(hm.containsKey(wX3 / 4)){
          answer += (long)hm.get(wX3/4).size() * dupli;
        }
      }

      int wX4 = key * 4;
      if(wX4%2 == 0){
        if(hm.containsKey(wX4 / 2)){
          answer += (long)hm.get(wX4/2).size()*dupli;
        }
      }

      if(wX4 % 3 == 0){
        if(hm.containsKey(wX4 / 3)){
          answer += (long)hm.get(wX4/2).size()*dupli;
        }
      }
      
      if(dupli > 1){
        answer += (long)dupli * (long)(dupli -1 )/2;
      }
      
      hm.remove(key);
    }
    return answer;
    }
}

이건 아직 내가 풀 문제가 아니다

 

다음에 다시 도전하자

 

 

 

📚도움받은곳

 

프로그래머스 시소 짝궁

어느 공원 놀이터에는 시소가 하나 설치되어 있습니다. 이 시소는 중심으로부터 2(m), 3(m), 4(m) 거리의 지점에 좌석이 하나씩 있습니다.이 시소를 두 명이 마주 보고 탄다고 할 때, 시소가 평형인

velog.io