코드카타 #01

TaeYang·2021년 9월 13일
0

CodeKata

목록 보기
1/8

문제


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

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

예를 들어,
nums은 [4, 9, 11, 14] target은 13
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.

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


첫번째 풀이

let num = [4, 9, 11, 14];
let taget = 13;

const twoSum = (nums, target) => {
  for(let i = 0; i <nums.length; i++) {
    for(let j = 0; j <nums.length; j++) {
      if (nums[i] + nums[j] == target) {
        return [i,j];
      }
    }
  }
}

풀이 과정

  • 중첩 for문을 사용해 nums의 인덱스 값을 ij로 0부터 순회하게 만듬
  • if문을 사용해 nums[i]nums[j]를 더한 값과 target이 일치 할때 return[i,j]를 반환하게 함

용현님 풀이

let num = [4, 9, 11, 14];
let taget = 13;

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

풀이 과정

  • arr이라는 빈 배열을 선언해줍니다
  • for문을 사용해 nums의 인덱스 값인 i를 0부터 순회함
  • 중첩for문을 사용해 nums의 인덱스 값 ji의 인덱스 값과 겹치지 않게 i + 1을 해서 순회함
  • if문을 사용해 nums[i]nums[j]를 더한 값과 target이 일치 할때 arr빈 배열에 pushij를 넣어줌
  • arr 배열을 반환

최종 풀이

let num = [4, 9, 11, 14];
let taget = 13;

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

위에 코드들과 다른점

  • 첫번째 풀이는 j의 인덱스값을 0부터 순회하게해 i와 중복될수도 있기 때문에 i + 1로 변경
  • 두번째 풀이에 있던 빈배열과 push메소드를 사용 하지 않고 i,j를 배열로 담아 반환

짧은 회고

문제를 풀어 보는 사람들마다 각자 다르게 생각해 문제를 풀기 때문에 이렇게 서로 같은 문제를 풀어보면서 여러가지 방법으로 풀수있구나 라는 생각이 드는 시간이였다.

profile
음악 전공 이였던 예비 프론트엔드 개발자☀️

0개의 댓글