[JS][프로그래머스 -LEVEL 2 - 시소짝 ]

정대만·2023년 7월 25일

코딩테스트

목록 보기
33/51
post-thumbnail

문제해석

여기서 return 하는것은 하나의 쌍이다.

  • 처음 풀이 방식
    배열을 만든후 180번인덱스에 180이 존재합니다라고 알려준다. 180x2
    180x3 180x4 인덱스에 180번이 존재하고 있어요를 알려준뒤 다음번에 360 이나오면 인덱스가 이미 채워져있으니 쌍이 되는 경우라고 알려준다.count+=1 를 한다.
  • 하지만 이런 경우 100 , 100 ,100 처럼 같은 수가 존재하는 경우에는 count+=1 를 하니까 정확하게 count 할수 없는 경우가 발생하였다.
  • 따라서 nC2 처럼 같은 경우를 카운트해서 2개씩 잡아주는경우의 수를 더하면될거같다는 생각을 했는데 <- 이런경우에서도
    미세한 오류가 발생하였다. ( 찾지 못함)
    그래서 이경우를 포기하고 다른 경우를 찾아보았다.

다른 사람 풀이

function solution(weights) {
    let ret = 0
    const map = new Map()
    for (const weight of weights){
        if (map.get(weight)) map.set(weight,map.get(weight)+1)
        else map.set(weight,1)
    }
    const ary = [2/3,2/4,3/2,3/4,4/2,4/3,1]
    
    for (let i = 0 ; i<weights.length ; i++) {
        const a = weights[i]
        for (const b of ary){
            const num = map.get(a*b)
          
            if (num){
                 
                 if (a*b===a && num>1) ret += num-1
                 else if (a*b!==a)ret += num
            }
        }
     
    }
    
    return ret/2
}

나처럼 곱하기를 하는것이 아닌 나누기를 해서 배열에 존재하는 수인경우 count 를 하는 것을 보여준다.
이때 count+=1 를 하는게 아니라..
100:3 인경우
어쩌피 2개씩을 뽑아야되니까 나인경우를 빼면 2 개가 가능합니다. <- 이것을 알려주는 +=2 를 한다.

그다음 마지막에 이경우는 쌍^^ 이기때문에 /2 를 한 값을 return 하겠습니다.로 보여주면 된다.

실수

복잡하게 짤려고 안하는데 늘 코드가 드러운거 같다.
여기서 map 을 어떤 경우에 쓸수 있는지 배우게 되었다.

  • Map 선언
  • Set == 넣어주세요 이때 (key , value ) 값으로 넣는다.
  • Get == 들어다볼까? 이다.map.get(들어다볼 경우의수) 를 하면 map[key] 가지고 있는 value 를 볼수 있다.
    object 형식으로 표현한다면 obj[key] ==value 이런식이다.
profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

많은 도움이 되었습니다, 감사합니다.

답글 달기