[CodeKata] Day1 & Day2

yoonee·2021년 10월 19일
0

JavaScript

목록 보기
5/8

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

  • nums: 숫자 배열
  • target: 두 수를 더해서 나올 수 있는 합계
  • return: 두 수의 index를 가진 숫자 배열
    예를 들어,
    nums은 [4, 9, 11, 14] target은 13
    nums[0] + nums[1] = 4 + 9 = 13 이죠?
    그러면 [0, 1]이 return 되어야 합니다.

가정 -> target으로 보내는 합계의 조합은 배열 전체 중에 2개 밖에 없다고 가정하겠습니다.

const twoSum = (nums, target) => {
  for(let i=0; i<nums.length; i++){ // nums[i]를 찾는다.
    for(let j=0; j<nums.length; j++){ // nums[j]를 찾는다.
      if(nums[i] + nums[j] === target){
        return [i,j] // i 와 j 를 배열로 리턴.
      }
    }
  }
}

twoSum([4, 9, 11, 14] ,13);

처음 푼 코드는 이렇게 진행된다.
그런데 만약 twoSum([5, 2, 8, 14] ,10) 일때, 위 코드는 [0,0] 이 반환된다.
이를 고쳐보고자

const twoSum = (nums, target) => {
  for(let i=0; i<nums.length; i++){
    for(let j=0; j<nums.length; j++){
      if(nums[i] + nums[j] === target && nums[i] !== nums[j]){ // and연산자 사용하여 같은인덱스는 빼주기!
        return [i,j]
      }
    }
  }
}

twoSum([5, 2, 8, 14] ,10);

And연산자를 사용해서, 같은 인덱스번호는 포함시켜주지 않는다.
리턴값은 [1,2] 가 되는것을 확인 할 수 있다.

reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
x: 숫자 return: 뒤집어진 숫자를 반환!

  • x: 1234 return: 4321
  • x: -1234 return: -4321
  • x: 1230 return: 321
const reverse = x => {
  let num = x.toString().split('').reverse();
  /* x -> 문자열로 -> 하나씩 쪼갠다 -> 거꾸로 뒤집는다.
  ['4', '3', '2', '1', '-'] */
  
   if(num[num.length-1] === '-'){  //num[마지막인덱스]가 '-' 일때,
    num.pop(); // 맨 뒤 인덱스를 지워준다.
    return num.join('') *-1; // 쪼개진 문자열을 합치고, -1을 곱함(숫자형string에 숫자를 곱해주면 문자열이 숫자로 변함!)
   }else if(num[0] === '0'){// num 첫번 째 인덱스가 '0'일때, 
     num.shift();// 첫번째 인덱스를 지워준다.
     return Number(num.join(''));// 여기서는 Number메서드를 사용하여 문자를 숫자로 바꿔줘야한다! 
   }else{
     return Number(num.join(''));
   }
 
}

reverse(-1234);

사실 처음부터 문자열로 바꿔줄 생각조차 못해서.. 문제가 풀리지 않았다.
인자가 음수일경우, reverse() 를 사용하면 '-'가 맨 뒤로 가는점도 생각을 못했는데,
여러 메서드를 사용하여 구현 할 수 있었다.

여기서, else if 부분에 reverse(1230) 일때, 뒤집어지면 0321 이 되기때문에 0을 지워주는 메서드를 넣어준건데, 생략을 해도 된다는 점을 알게되었다!

else문에서 Number()메서드를 사용하여, '0321' -> 0321이 되는데,
숫자기때문에 321로 리턴된다는것이었다!

const reverse = x => {
  let num = x.toString().split('').reverse();
  if(num[num.length-1] === '-'){
    num.pop();
    return num.join('') *-1;
   }else{
     return Number(num.join(''));
   }
}

reverse(1230);

0개의 댓글