[CodeKata] twoSum 함수

zhflsdl보보·2022년 10월 31일
0

알고리즘

목록 보기
1/2

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개 밖에 없다고 가정하겠습니다.



배열의 index값을 돌아야하니까 for문을 쓰자.
두개의 index를 더해야 하니까 for문을 두번써서 더해야되겠다. 이중 for 문이 쓰는게 구구단과 비슷하네. 이중 for문을 쓰고 if문으로 조건을 달자.


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

console.log(twoSum([4,9,11,14],13);

🔹 함수 식 안에 console.log가 아닌 return을 쓰는 이유?
console.log는 단지 찍어내는 것이고 return은 값을 받아서 함수 밖으로 던져주는 역할이다.
그리고 함수 안에서 return을 만나면 함수가 종료된다.

여기 함수에서 console.log를 쓰게 되면, 함수가 계속 돌게 된다. 그래서 값을 안준다. (Run.js 에서는 [0,1], [1,0] 2개가 나옴 => if 조건에 맞는 값이 있어도 함수가 계속 돌기때문)

따라서, 함수에서는 return을 써야한다!


다시 돌아와서, 위처럼 이중 for문과 if문으로 작성하게 되면 중복값들이 나오게 된다.

이중 for문을 전부 돌면

이렇게 중복되는 값이 발생한다.

이 점을 해결하기 위해서

❗ 뒤의 for문의 j가 i보다 항상 큰 값이면 중복이 발생하지 않는다.

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

console.log(twoSum([4,9,11,14],13);

위의 코드에서 이중 for문을 돌고 나면,

이렇게 중복이 삭제된다.!

사진출처

profile
매일매일 성장하는 개발자

0개의 댓글