이번주부터 오전에 코드카타 시간을 진행했다.
알고리즘 문제 풀이는 너무 어려웠고 더 공부해야겠다고 생각했다!
그래서 알고리즘을 알고싶어서 시작하는 <알고리즘?알고싶음!>시리즈👩🏻💻
twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
예를 들어,
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
예를 들어,
nums은 [4, 9, 11, 14] target은 13
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.
for문을 사용하는 방법
const nums=[4, 9, 11, 14];
const target = 13;
const twoSum = (nums, target) => {
let arr=[];
for(i=0; i<nums.length; i++){
for(j=i+1; j<nums.length; j++){
if((nums[i]+nums[j])===target){
arr.push(i,j)
}
}
}
return arr;
}
//[0,1]출력
설명!
let arr=[];
조건을 충족하는 index를 담을 빈 배열을 만들어 준다.
for(i=0; i<nums.length; i++)
첫번째 for문에서 index번호 0부터 시작하여 배열을 돈다.
for(j=i+1; j<nums.length; j++)
두번째 for문은 index번호 i+1부터 시작하여 배열을 돈다.
이렇게 되면 첫번째 for문이 4일 때, 두번째 for문은 9부터 시작하게 된다.
즉,4일 때 9,11,14순서로 배열을 돌고 9일 때 11,14 그리고 11일 때 14의
순서대로 반복하게 된다.
if((nums[i]+nums[j])===target)
위에서 두개의 for문으로 배열의 값을 순서대로 비교할 수 있게 되었으니
값을 더해서 target이 나오는 조건문을 넣어줄 수 있다.
두 값을 찾아서
arr.push(i,j)
조건을 충족하는 index번호를 만들어둔 arr배열에 넣어주면 된다.
indexOf메소드를 사용하는 방법
let arr=[];
for(i=0; i<nums.length; i++){
if(nums.indexOf(target-nums[i])!==-1){
arr.push(i);
}
}
return arr;
먼저 위에서처럼 빈 배열을 만들어주고 for문을 사용해서 배열을 돈다.
if(nums.indexOf(target-nums[i])!==-1)
target에서 nums[i]를 뺀 값이 배열에 있다면(없다면 -1을 출력할텐데 !==연산자를 사용하여 있다는 조건을 만들어준다) 현재 i값과 해당하는 index번호를 arr안에 넣어주는 풀이 방법이다.
이 방법은 내 짝꿍 동우님의 풀이법인데
난 지난주에 indexOf를 공부했음에도 생각하지 못해서 반성하게 되었다😭
끝!
오올~