카테고리 없음

알고리즘 - 중첩 for문 사용

heejunn 2022. 4. 11. 20:45

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

 

처음 이 문제를 접한 나는 for문을 쓰면 되겠는데 ? 라는 생각을 했고 그걸 코드로 작성하려니   멍.. 했습니다.

 

그렇게 여러 고민 끝에 풀이 법을 알아냇고 풀이법은 중첩for문 이었습니다.

 

중첩 for문 이란 ? 

 

for(var i=0; i<100; i++){
    for(var j=0; j<100; j++){
        
    }
}

 

위 처럼 for문 안에 for문이 있는 형태입니다.

for문 (기본형태)

위와 같이 for문이 한번만 실행 되는 경우에는 결과값이 오른쪽과 같이 출력됩니다 !

 

중첩for문

위 처럼 for문안에 for문이 들어가있는경우에 중첩for문 이라고 합니다.

중첩 for문 같은 경우 오른쪽 결과값 보이시나요 ? 상위 for문이 i = 0 으로 선언했으므로 0부터 시작하게되고

그 밑 for문에서 j = 1 로 선언함으로 i = 0으로 고정 j = 1 부터 10까지 출력 후 j <=10 이므로 순회가 끝나 다시 i 순서로 넘어가게 된다.

그래서 결과값이 i 는 0 으로 고정  j 는 1부터 10까지 출력 후   다시  i = 1 부터  j  = 1 에서 10까지 이렇게 i = 10 이 될때까지 순회하게 된다.

 

다시 본론으로 돌아와서 문제를 보겠습니다.

 

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

 

자 그럼 우리는 다시 생각 해볼 필요가 있습니다.  위와 같이 nums가 [4, 9, 11, 14] target은 13 이라고 가정했을 때

?번째 인덱스 + ?번째 인덱스 === target 일때  return[?,?] 이렇게 출력이 되어야 한다.

그럼 이중 for문을 통해 작성해 보자

 

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에 +1을 해준 이유는 target로 보내는 합계의 조합은 배열전체에 두개 밖에 없다고 했기 때문에

0,0 / 1,1 / 2,2 이렇게 나올수 없기 때문에 j 에 1을 더해줬다.