본문 바로가기
Algorithm

99클럽 코테 스터디 17일차 TIL - Find the Distance Value Between Two Arrays (리트코드 1385 / JavaScript)

by 륜곰 2025. 4. 22.

오늘의 문제 링크

 

⭐ intro : 문제를 생각해나간 방식

 3개의 매개변수가 주어지되, 각각 1~3번이라 칭하고 1번(이하 arr1)과 2번(이하 arr2)의 각 요소끼리의 차잇값이 3번보다 같거나 작을경우의 매칭 경우의 수를 구하는 문제다. 앞서 풀었던 문제처럼 이중 for문으로 돌면서 각 요소끼리 조건을 순회해서 풀면 되겠다 싶었다. 다만 절대값을 구해야 하므로 차이값이 음수일 경우 '-'를 씌워주면 되겠다 싶었다.

 

⭐ 풀이과정

 이번에도 매우 간단하게 풀었다. 항상 매 주의 이틀정도까지는 쉽게 풀었었던것 같다. 내일은 난이도가 확 올라가겠지...?ㅎ.. 일단 리턴값으로 넘겨줄 result 상수를 만들었다. 또 첫번째 배열을 순회할때 첫번째 값을 순회할 때마다 true, false에 따라 1이상이 올라가되 0으로 초기화해주고, 절대값 int상수도 0으로 초기화 해줄 수 있도록 만들었다.

 이후로는 조건이 맞을 경우는 어떠한 값도 더하지 않고, 한개라도 조건이 안맞을 경우 1씩 증가하도록 만들어서, count값이 아무것도 증가되지 않는, 문제의 true 조건일 때 result값을 1씩 증가시키도록 만들었다.

 

⭐ 제출답안

// 1차 제출
var findTheDistanceValue = function (arr1, arr2, d) {
  let result = 0;

  for (let i of arr1) {
    let count = 0;
    let int = 0;
    for (let j of arr2) {
      int = i - j;
      int < 0 ? (int *= -1) : int;
      if (!(int > d)) {
        count += 1;
      }
    }
    if (count === 0) result++;
  }

  return result;
};

// 2차 제출
var findTheDistanceValue = function (arr1, arr2, d) {
  let result = 0;

  for (let i of arr1) {
    let count = 0;
    let int = 0;
    for (let j of arr2) {
      int = Math.abs(i - j);
      if (!(int > d)) {
        count += 1;
        break;
      }
    }
    if (count === 0) result++;
  }

  return result;
};

후후 이렇게 마지막을 책임져주던 위치에서

 

상위권으로 쑥 올라와따!!! 땡큐 break ^0^

 

 코테 푸는 시간이 생각보다 오래 안걸려서, 이왕 코드 푼거 어떻게 유연하게 대처하면 소요시간을 더 빨리 탐색할 수 있을까 싶었는데, 다른 그래프를 클릭하면 다른사람이 푼 문제들 중 예시를 볼 수 있었다. 가만보니까 처음보는 Math.abs()가 보이지 않던가...!! 그리고 for문 중간에 끊어주는 break가 보여서, 아~~ 싶어 바로 적용하고, 위와 같은 결과가 나왔다. 같은 로직으로 풀되 절대값 만드는 코드를 삼항연산자로 '-' 씌워주지 말고, 애초에 Math함수중에 절대값을 만들어주는 메서드가 있었으니 이를 이용하고, 조건문중 하나라도 걸리는게 있으면 바로 해당 요소는 탐새하지 않는게 맞으므로 break를 걸어주면 쓸데없이 필요없는 요소를 순회하지 않고 바로 다음 조건문으로 넘어갈 수 있도록 만들었다. 사실 생각하면서 논리연산자 &&를 이용하면 하나라도 false이면 false를 뱉으니까 이걸 어떻게 이용할 수 없을까 싶었는데 아무래도 어렵지 싶었단 말이지. 직관적으로 해당 조건일때 조건문을  빠져나올 수 있는 break를 잠시 잊고있었다.

 

⭐ 공부했던 개념들

 

Math.abs() - JavaScript | MDN

Math.abs() 정적 메서드는 숫자의 절대 값을 반환합니다.

developer.mozilla.org