Q. twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면, 두 값을 더해서 '특정 수(target)'가 나오는 index를 배열에 담아 return하기
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
# target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정
예)
nums = [4, 9, 11, 14]
target = 13
위의 값이 주어질 경우
nums[0] + nums[1] = 4 + 9 = 13 이므로
[0, 1]이 return 되어야 함
A. 우리 팀 답
const twoSum = (nums, target) => {
const arr = []
for( i = 0 ; i < nums.length ; i++ ){
for( j = 0 ; j < nums.length ; j++ ){
let sum = nums[i] + nums[j]
if( sum === target && nums[i] !== nums[j] ){
arr.push(i, j)
}
}
}
return Array.from(new Set(arr))
}
// 예
let nums = [4, 9, 11, 14, 7 ,6]
console.log(twoSum(nums, 13)) // [ 0, 1, 4, 5 ]
- 두 가지 수의 합을 위한 모든 경우의 수를 위해
- for문을 사용해 배열의 각 요소를 돌며 i 값을 증가시킨다.
- for문을 사용해 배열의 각 요소를 돌며 j 값을 증가시킨다.
- i와 j를 각각 인덱스 값에 적용시켜 배열 속 2가지 수로 만들 수 있는 모든 합을 구함다.
- 만약 "그 합이 taget 값과 같음 && i와 j 가 다른 값임" 조건을 만족하면
- arr배열에 i, j 값을 추가한다.
- 예 [ 0, 1, 1, 0, 4, 5, 5, 4 ]
- 이 배열에는 4 + 9, 9 + 4, 7 + 6, 6 + 7에 해당하는 index 값이 모두 담겨 중복된 값을 가지게 된다.
- new Set()내장객체를 사용해 배열 내 중복 된 값을 제거 한다.
- new Set() (MDN 명세) : 자료형에 관계없이 유일한 값만 저장
- Array.form()메서드를 사용해 새로운 배열로 만들어 반환
- Array.form()메서드 (MDN 명세) : 유사 배열이나 반복 가능한 객체를 복사해 새로운 Array를 생성
B. 다른 팀 답 참고해 다시 풀어보기
const twoSum= (nums, target) => {
const arr = []
for( i = 0 ; i < nums.length ; i++ ){
for( j = 1; j < nums.length ; j++ ){
if( nums[i] + nums[j] === target ){
arr.push(i, j)
}
}
}
return arr
}
// 예
let nums = [4, 9, 11, 14, 7 ,6]
console.log(twoSum(nums, 13)) // [0, 1, 4, 5, 5, 4 ]
- 두 번 째 인덱스 값인 j의 for문을 돌릴 때 1부터 세팅하는 방법.
이렇게 되면 처음부터 중복된 값을 피하며 계산할 수 있다. 😨 - But 이 꿀팁을 활용해 테스트를 돌려보았는데, 원하는 값이 안나왔다.
- 마지막 턴에서 i가 5가 되었을 때, j가 1, 2, 3, 4를 돌며 num[i] = 6, num[j] = 7인 상황에 결국 걸려버린 것.
const twoSum= (nums, target) => {
const arr = []
for( i = 0 ; i < nums.length - 1 ; i++ ){
for( j = 1; j < nums.length; j++ ){
if( nums[i] + nums[j] === target ){
arr.push(i, j)
}
}
}
return arr
}
// 예
let nums = [4, 9, 11, 14, 7 ,6]
console.log(twoSum(nums, 13)) // [0, 1, 4, 5]
- 마지막 턴을 없애기 위해 첫 for 문을 마지막 인덱스 한 칸 앞인 num[4]=7에서 마칠 수 있도록, 조건에 -1을 추가했다.
문제 풀이 후 세 팀과 방법을 공유했는데, 세 팀 다 다르게 작성했다는 사실에 놀람.
반응형
'D.evelop [CS] > Algorithm' 카테고리의 다른 글
[Algorithm 007] JS - sameReverse (0) | 2021.09.16 |
---|---|
[Algorithm 006] JS - reverse (0) | 2021.09.14 |
[Algorithm 004] JS - 주어진 문자열에서 문자의 인덱스 찾기 (0) | 2021.09.11 |
[Algorithm 003] JS - 가장 긴 단어 찾기 (0) | 2021.09.11 |
[Algorithm 002] JS - 최소값, 최대값 구하기 Math.random() (0) | 2021.09.09 |
댓글