하루에 한 문제씩 6주 간 진행하는 위코드의 code kata가 시작되었다.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
예를 들어,
nums가 [4, 9, 11, 14], target이라면 13
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.
# 가정
target으로 보내는 합계의 조합은 배열 전체 중에
2개 밖에 없다고 가정하겠습니다.
1) 각각의 값을 더하도록 for문 중첩을 사용하고
2) 더한 결과값은 객체의 value값으로, 인덱스는 key값으로 return하려고 했다.
예를 들어, sum = {0,1 : 13, 0,2 : 15, 0,3 : 17, ...}
이런 식으로 말이다.
그래서 나는 아래와 같은 방식으로 코드를 짰다.
function twoSum(nums, target) { let sum = {}; for(let i = 0; i < nums.length; i++) { for(let j = i + 1; j < nums.length; j++) { sum[[i, j]] = nums[i] + nums[j]; if(sum[[i, j]] === target) { return [i, j] } }; };
문제를 풀고 팀원인 재현님의 코드와 비교를 해봤다.
function twoSum(nums, target) { for(let i = 0 ; i < nums.length; i++) { for(let j = i + 1 ; j < nums.length ; j++) { if(nums[i] + nums[j] === target) { return [i, j]; } } }; };
재현님의 코드가 더 간결하고 깔끔하다.
문제를 세부적으로 쪼개되 그대로 쫓아가지만 말고, 단계를 합쳐서 코드의 효율성을 높이는 과정이 필요하다.
** 양수 0과 음수 0이 있었다. 이거 뭐지?