codekata - day1

김철회·2022년 5월 11일
0

codekata - day1 리뷰.

문제!
twosum함수에 숫자 배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해주세요.
ex) nums : 숫자 배열 / target : 두 수를 더해 나올 수 있는 합계 / return : 두 수의 index를 가진 숫자 배열

문제를 해석해보자.(문제 안에 답이 있다!)

  1. 먼저 twoSum이란 함수는 인자로, nums와 target을 갖는다.
  2. nums는 배열이고 target은 어떠한 수이지만, 조건에 따라 nums배열의 랜덤의 두 가지 숫자를 더한 값이 될 수 있다.

nums의 배열 안에 있는 숫자 2개를 합쳐서 target이 되는 nums의 인덱스를 return 해줘!

접근법

  1. 처음엔 nums의 배열에 있는 숫자들이 하나도 빠짐 없이 서로를 더해볼 수 있는 경우의 수를 찾으려고 했다.
  2. 경우의 수 찾기
    nums=[1,2,3,4,5,6,7] 일 때,
    1과 더할 수 있는 숫자 조합의 경우의 수 => 2,3,4,5,6,7
    2일 때 => 3,4,5,6,7 *단, 1하고는 더하지 않아도 된다. 앞에서 했으니까!
    3일 때 => 4,5,6,7
    4일 때 => 5,6,7
    5일 때 => 6,7
    6일 때 => 7

뭔가 보인다..... 보여...... for문이 보인다......
숫자들을 여러번 반복해서 더해주는 for문에 접근까지 완료했다.

하지만, 문제가 생겼다. 1,2,3,4,5,6을 하나씩 꺼내서 더해볼 수는 있는데.. 1일 때 2,3,4,5,6,7은 또 어떻게 더하느냐 말이다!

아 또 보인다..... 보여..... for문 보인다...

1일 때, 2일 때, 3일 때, 4일 때, 5일 때, 6일 때가 for문으로 반복되었다면, 1일 때 2,3,4,5,6,7을 또 반복문을 써주면 되지 않겠는가!!

즉, 중첩 for문이 필요한 것이다!

위의 작성한 코드를 차근차근 해석해보자. 코드를 잘 만드는 것만큼 잘 만들어진 코드를 잘 해석하는 것도 중요하다고 생각한다!

  1. 바깥에 있는 for문을 통해 i=0부터 nums.length전까지 반복한다.
    반복하면서 return되는 값을 순서대로 해석해보자.

  2. i=0 => nums[0] = 1 인데, 내부의 중첩 for문에 의해서 j=i+1 부터 다시 돌게 된다.
    즉, i=0일 때(가장 바깥 for문에 의해) j=0+1부터 nums.length 까지 반복한다.

    i=0 / j=0+1, j=2, j=3, j=4,j=5, j=6, j=7
    i=1 / j=1+1, j=3, j=4,j=5, j=6, j=7
    i=2 / j=2+1, j=4,j=5, j=6, j=7

이렇게 i < nums.length까지 반복하는 것이다.

그랬을 때, nums[i]+ nums[j] === target과 같다면 그 때의 인덱스를 반환하고 함수를 종료해줘라! 라는 것이다.

끝!

profile
안녕하세요!

0개의 댓글