Algorithm - 특정 수를 담는 배열

rachel's blog·2021년 10월 18일
0

Algorithm

목록 보기
5/11
post-thumbnail

twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.

nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열

예시
nums은 [4, 9, 11, 14] target은 13

nums[0] + nums[1] = 4 + 9 = 13 이죠?

그러면 [0, 1]이 return 되어야 합니다.

🥑 나의 첫번째 풀이

let i =0;
const arr = [];
while(i !=-1){
  let j = nums.indexOf(target-nums[i]);
    if(nums[i] +nums[j] === target) {
      arr.push(i);
      arr.push(j);
    }
    i++;
    return arr
}

테스트 케이스에서 if 조건을 아예 읽지 못했다. deep equality가 아니라는 오류가 나왔다.
run js에서는 정상적으로 나왔는데 말이다..💦

🍌짝궁의 첫번째 풀이

let i;
  let result;
  nums.forEach(num => {
    i = target - num
    if (num!= -1) {
      result = num
      return(nums.indexOf(i), nums.indexOf(result))
    }
  })

역시 오류, forEach문으로 배열 순회하는 것이 더 간단한 코드라고 판단되어 짝궁의 코드를 토대로 코드를 수정하였다.

📌수정내용
1. if 문 내의 조건 수정
-나의 경우 i를 인덱스로 변수를 주었는데, 짝궁의 경우 i를 nums의 각 요소 값 , 즉 nums[idx] 로 주었기 떄문에 nums.indexOf(i) 로 조건을 변경하였고,
2. 우리가 출력해야할 반환값은 배열인데 배열에 대한 선언이 없었기에,
새로운 배열을 생성해서 배열의 인덱스0과 1값에 각각 target을 더하면 나오는 인자로 바꿨다.

수정코드

let i;
  let result;
  let newArr = [];

  nums.forEach(num => {
    i = target - num
    if (nums.indexOf(i) != -1) {
      result = num
      newArr[0] = nums.indexOf(i)
        newArr[1] = nums.indexOf(result)
    }
  })
      return(newArr)

테스트 케이스 조건을 모두 만족하며 정상적으로 출력된다.

🥑두번째 풀이

  const arr = [];

  for(let i=0; i<nums.length; i++){
    for(let j=0; j<nums.length; j++){
      if(nums[i] + nums[j] === target) {
        arr[0] = i;
        arr[1] = j;
        
        return arr;
      }
    }
  }

중첩 for문을 통해 구현, i와 j의 인덱스 활용

📌코드리뷰

  • forEach문 사용을 통해 배열 순회하는 방법 사용하는 것은 for 중접문보다 버그가 덜 걸린다.
  • 첫번째 풀이인 while문을 살려서 코드를 할 수는 없을까?
profile
블로그 이전 : https://rachelslab.tistory.com/

0개의 댓글