Code Kata 1일차

임채현·2022년 1월 10일
0

오늘은 알고리즘 실력을 키워보는 코드 카타 1일차이다.
사전스터디부터 알던 청규님과 짝이 되었다. 오늘 안나오셔서 줌으로 대화....

twoSum함수에 숫자 배열과 특정 수로 인자를 넘기면 더해서 '특정 수'가 나오는 index를 배열에 담아 return하라는 문제였다.

먼저 서로 다른 두 수들의 합이 일치하는 경우를 생각해야했다. 만약에 하면 코드가 더 복잡해질것이니까.....
하지만!

가정
target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정하겠습니다.

라고 밑에 쓰여져있었다.

const twoSum = (nums, target) => {
  for (let i in nums) {
    for (let j in nums) {
      if (nums[i] + nums[j] == target) {
        return [Number(i),Number(j)];
      }
    }
  }
}

초반에 최대한 간결하게 풀고 싶어서 for문을 안쓰려했다.
배열의 reduce메소드를 이용할려 했는데 생각해보니 reduce는 인접한 요소끼리 밖에 적용이 안되서 쓰지 않는게 좋겠다는 생각이 들었다.
이중 for문을 쓰니까 너무 쉽게 풀렸다.
안쪽 for문의 j의 시작을 처음에 1로 잡았는데 생각해보니까 중복되도 상관이 없었다. 중복된거 더해봤자 절대 target값이 나올리가 없으니까....
중요한거는 전에도 알고 있었지만 for-in문의 i를 반환하면 str으로 나온다.(객체 안을 순회하는 용도로 쓰는 것이기 때문에) 그래서 반드시 숫자 처리(type 변환)을 해주어야한다.
그리고 중요하다고 생각하는 것이 if문뒤의 return이 함수의 종료시킨다는 것이다! 그냥 콘솔로 찍으면 배열이 쌍으로 나온다. [1,2], [2,1] 처럼...
사실 둘의 결과는 같기 때문이다. 하지만 문제에서 원하는 배열은 앞의 요소의 숫자가 더 작아야하기 때문에 조건문의 조건을 만족시키면 함수가 종료되는것이 중요하다.

함수나 loop의 종료에 대한 방법은 여러가지 있다. break를 써도 되고...
자바스크립트 기능종료에 대해 정리해둔 사이트이다.

profile
열심히 살고 싶은 임채현입니다.

0개의 댓글