사이트: HackerRank
난이도: 미디움
분류: Search
임의의 정수 배열과 타겟 값(정수)이 주어졌을 때, 배열 안 두 요소의 차가 타겟 값과 같은 경우의 수를 반환하라.
어렵지 않은 문제이다. set을 사용하여 적절히 기록하고 다시 루프를 돌면서 pair가 되는 숫자가 있는지 확인만 하면 되는데, 내가 계속 헤맨 것은 차 연산이었다.
차 연산을 하면 보통 더하거나
, 빼야
한다. 두 연산을 이용하려다 보니 로직이 복잡하게 꼬였고, 곰곰히 생각해보니 pair가 되는 숫자를 규칙 하나로만 정의하면 쉽게 풀릴거 같이 느껴졌다.
아니나 다를까 pair가 되는 수를 현재 요소 + k
로 설정해서 해결하니 쉽게 로직이 풀렸다.
조금 더 기본적인 것들과 문제의 핵심을 바라볼 필요가 있을 것 같다...
function pairs(k, arr) {
// Write your code here
const s = arr.reduce((s, e) => s.add(e), new Set());
return arr.reduce((count, e) => s.has(e + k) ? count + 1 : count, 0);
}
바로 풀 수 있었던 문제들은 지금은 생략하고 추후 더 효율적인 문제 풀이법을 찾아보도록 하겠다.