<알고리즘?알고싶음!>-1

이지선·2021년 7월 25일
6

알고리즘

목록 보기
3/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 되어야 합니다.

👉풀이방법1

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배열에 넣어주면 된다.

👉풀이방법2

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를 공부했음에도 생각하지 못해서 반성하게 되었다😭

끝!

profile
👩🏻‍💻

3개의 댓글

comment-user-thumbnail
2021년 7월 28일

오올~

1개의 답글