[Code Kata] Week1 - Day1
문제
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개 밖에 없다고 가정하겠습니다.
풀이
1번 풀이(나의 풀이)
const twoSum = (nums, target) => {
// 아래 코드를 작성해주세요.
let result = [];
nums.forEach((num, i) => {
let targetIndex = nums.indexOf(target - num);
targetIndex !== -1 && result.push(i);
});
return result;
}
const twoSum = (nums, target) => {
// 아래 코드를 작성해주세요.
let result = [];
nums.forEach((num, i) => {
let targetIndex = nums.indexOf(target - num);
targetIndex !== -1 && result.push(i);
});
return result;
}
이번 문제의 경우에 nums
라는 숫자가 담긴 배열을 받고 이를 통해서 두 수의 합이 target
과 동일한 수들의 인덱스를 구해야한다. 문제의 조건을 나눠보면 아래와 같다.
- 주어진 숫자를 순회하면서 조건을 만족하는지 검사한다.
- 두 수의 합이
target
이 나오기 위해서num
을 순회 중일 때target-num
이 배열 안에 존재하면 된다. - 조건을 만족하는 경우에 해당
num
의 인덱스를result
배열에 넣어준다.
따라서 위의 코드를 보면 반환해 줄 result
라는 비어있는 배열을 선언해준 뒤에 num
과 i
를 인자로 받는 forEach()
를 통해서 target - num
이 존재하는 num
의 인덱스인 i
를 result
배열에 넣어주도록 했다. 위의 경우에 만약 2가지 이상의 경우가 존재하게 되면 모든 수의 인덱스를 받아올 수 있으므로 문제의 조건도 충분히 만족한다.
2번 풀이(짝의 풀이)
const twoSum = (nums, target) => {
let result = [];
// 아래 코드를 작성해주세요.
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (target === nums[i] + nums[j]) {
result.push(i, j);
}
}
}
return result;
}
코드 카타는 2인 협동으로 진행이 된다. 한 명은 드라이버(직접 구현)이고 한 명은 네비게이터(방향 제시)를 진행하는데 이번에는 내가 드라이버를 맡았다보니 세준님의 코드를 볼 수 있었다.
세준님의 경우에는 for문 중첩을 이용해서 두 수의 합이 target
과 동일한 경우에 두 인덱스를 넣어주도록 했다. 두 사람이 한 개의 문제에 접근을 하다보니 생각에 따라서 다양한 코드가 나올 수 있고 이를 통해서 생각을 넓힐 수 있는 기회가 될 것 같다. 또한, 나의 경우에 문제를 작게 쪼개면서 정리되지 않은 코드들을 붙여 해결하는 안 좋은 습관이 있기 때문에 이를 통해서 코드의 가독성이나 문제에 대한 접근 방법에 대해서 고민해볼 기회가 되었으면 한다.
Author And Source
이 문제에 관하여([Code Kata] Week1 - Day1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jun_n3/Code-Kata-Week1-Day1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)