Algorithm) Codekata_Day 1

김명성·2021년 7월 19일
0

Algorithm

목록 보기
1/61
post-thumbnail

❓ Question

twoSum 함수에 숫자 배열과 '특정 수'를 인자로 넘기면,
더해서 '특정 수'가 나오는 index를 배열에 담아 return 하세요.

  • 가정 : target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다

📝 Solution

  1. {숫자배열}과 {특정 수}를 인자로 받는 함수를 만든다.
  2. index 값이 담길 배열 생성
  3. {숫자배열}의 i번째 인덱스와 i+1번째 인덱스를 더한 값을 {특정 수}와 비교한다
  4. {특정 수}와 일치하는 배열의 인덱스를 찾아 생성한 새로운 배열에 입력
  const twoSum = (nums, target) => { 			// 1번 
  let result=[];					// 2번
  for (let i = 0; i<nums.length ; i++){			// 3번
    for (let v = i+1; v<nums.length; v++){
      if (nums[i]+ nums[v] === target) {
        return result = [i,v];				// 4번
      }
    }
  }
}

▪️ Solution review

target으로 보내는 합계의 조합이 2개라고 했던 가정이 있어
같은 인덱스끼리의 값이 중복해서 더해지지 않도록 for문에 중첩을 주어 문제를 해결했다.
변수 설정을 i 와 v로 설정해 인덱스에 동시에 같은 것에 접근하지 못하도록 막아주었다.


📝 Another Solution

codekata를 하는 다른 조의 해결문을 보고
다른 방법으로도 접근이 가능하다는 것을 알게되었다.

const twoSum = (nums, target) => {
let arr=[];
for(i=0; i<nums.length; i++){
  if(nums.indexOf(target-nums[i])!==-1){
    arr.push(i);
  }
}
return arr;
}

▪️ Solution review

string.indexOf() 는 string 에서 주어진 값과 일치하는 첫번째 인덱스를 반환하고,
일치하는 값이 없다면 -1을 반환하는데,
if를 이용해 그 성질을 이용해 target 에서 각 인덱스의 값을 빼고
남은 인덱스 중 일치하는 값이 있다면 새로 만든 배열에 넣고,
아니면 반복문을 수행하는 방식으로 해당 문제를 풀어냈다.

아무래도 현재는 주어진 배열의 갯수가 적었기 때문에
반복문 중첩을 통해서도 빠른 계산이 나올 수 있겠지만,
배열안의 데이터가 많다면 이 부분에서 속도의 차이가 있을 수 있겠다.

조금 더 고민해 보는 습관을 가져야겠다.

profile
잠재력은 핵폭탄급 Frontend Developer

0개의 댓글

관련 채용 정보