twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
//nums = array
//target = number
const twoSum = function(nums,target) {
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j <nums.length; j++) {
if (nums[i] + nums[j] === target) {
if (i !== j) {
return [i, j]
}
}
}
}
}
point 1
두개의 if 문 중 (i !== j)의 경우가 훨씬 많으므로 시간이 더 오래걸립니다. 따라서 (nums[i] ===nums[j]) 를 먼저 비교하는 것이 유리합니다.
point 2
javascript for문에서는 2개의 변수를 동시에 선언할 수 없습니다. 따라서 i와 j는 따로따로 for 문을 통해 선언해 주어야 합니다.
//nums = array
//target = number
const twoSum = function(nums, target) {
let sorted = nums.sort (function(a, b) {
return a- b;
})
let low = 0;
let high = nums.length-1;
while (high > low) {
if(sorted[low] + sorted[high] === target) {
return [low, high];
} else if (sorted[low] + sorted[high] < target) {
low ++ ;
} else {
high -- ;
}
}
}
point 1
sort 라는 메소드는 array의 순서를 재정렬 후 반환하는 method입니다. sort를 통해 배열을 오름차순, 내림차순 혹은 특정 밸류를 기준으로 크거나 작은 값만 리턴하거나, 문자열인 경우 유니코드 코드 포인트 순서로 정렬할 수도 있습니다.
point 2
이때, return값은 복사한 새로운 array가 아닌 원래의 array를 바꾸는 것임으로 주의하세요.
point 3
while문은 조건이 참인 경우 계속 반복됩니다. <-for문의 활용과 차이를 주의하세요.
point 4
로직에 주의하세요. low와 high의 값이 타겟값보다 크다면 high 값을 하나씩 빼주어야 합니다. 반면 low와 high 값이 타겟보다 작다면 low값을 하나씩 올려주어야 합니다.
while이 반복되는 동안 총 3가지의 경우를 반복하게 되는 것입니다. 타겟과 같은 경우는 리턴을 하지만, 타겟보다 작거나 크다면 로우나 하이값이 변하는 형태로요!
navigated by 가윤님