문제
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 nums = [4, 9, 11, 14];
const target = 14;
const twoSum = (nums, target) => {
// 아래 코드를 작성해주세요.
let arr = [];
for (let i=0; i < nums.length; i++) {
for(let j=i+1; j < nums.length; j++) {
if( nums[i] + nums[j] === target){
arr.push(i, j);
return arr;
}
}
}
}
이중 for문을 사용하여 i와 j로 nums의 요소들이 더해질 수 있는 모든 경우의 수를 찾는 코드를 만들었다. 그리고 결과값이 찾고자 하는 값인 target과 일치한다면 i와 j를 각각 arr 배열에 넣어 return 하였다.
ㅈㅊㅈ 님 풀이
const twoSum = (nums, target) => {
// 아래 코드를 작성해주세요.
let result = [];
nums.forEach((num, i) => {
let targetIndex = nums.indexOf(target - num);
targetIndex !== -1 && result.push(i);
});
return result;
}
target - num 의 결과값을 nums.indexOf 를 사용하여 nums 배열 안에 존재하는지 확인하여 nums 배열안에 존재한다면 num과 더하여 target이 되는 값이 존재하기 때문에 해당 요소 값의 index를 결과값 배열에 넣고 출력한다.
느낀점
나는 문제에서 주어진 상황을 그대로 순차적으로 나열하여 문제를 풀었으나 ㅈㅊㅈ님은 for문을 forEach문으로 바꾸어 반복문도 더 간결하게 사용하였고 결과값을 찾는 로직 또한 한번 더 생각을 통해 더욱 간결한 로직을 만들어내었다.
앞으로 하나의 알고리즘 문제에 다양한 문제풀이 방법을 통해 사고의 폭을 넓힐 필요가 있음을 느꼈다.
'알고리즘' 카테고리의 다른 글
백준 온라인저지 100% 활용하기 ( vscode에서 nodejs 디버깅 모드 사용) (1) | 2022.05.02 |
---|---|
백준 JS | 1110번 더하기 사이클 (0) | 2022.04.26 |
백준 JS | 2525번 오븐시계 (0) | 2022.04.13 |
Algorithm | String형 인자에서 중복되지 않는 가장 긴 단어의 길이 반환하기-CodeKata3 (0) | 2022.01.18 |
Algorithm | Brackets 유효성 로직 구현 (0) | 2022.01.17 |