프로그래머스 LEVEL 2(시소 짝꿍)
-
사용 언어 : javascript
-
해결 날짜 : 2023-01-22
-
해결 방법 :
- weights 별 개수를 map에 저장
- 짝꿍이 될 수 있는 무게는 각 1.5, 4/3, 2배((2, 3), (3, 4), (2, 4))
- 중복을 방지하기 위해 무게 비율은 오름차순으로만 구함
- weights를 저장한 map을 돌며
- 자신과 똑같은 무게를 가진 짝꿍 구하기(count * (count - 1) / 2)
- ratios를 돌며 현재 자신의 무게와 짝꿍(ratio * weight)이 존재한다면
- 짝꿍 몸무게와 만들 수 있는 개수 구하기(count * map.get(ratio * weight))
-
회고 :
- 처음에 비율을 생각하지 못하고 직접 무게마다 짝꿍을 일일이 구한 다음 현재 weight보다 큰 값일 때를 조건에 추가했다.
- 하지만 비율로 생각하면 불필요한 로직을 줄일 수 있다.
-
코드
function solution(weights) { let answer = 0; const map = new Map(); const ratios = [1.5, 4 / 3, 2]; weights.forEach((weight) => { map.set(weight, (map.get(weight) || 0) + 1); }); map.forEach((count, weight) => { answer += (count * (count - 1)) / 2; ratios.forEach((ratio) => { if (map.has(ratio * weight)) { answer += count * map.get(ratio * weight); } }); }); return answer; }
-
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges