728x90
반응형
난이도
LeetCode => easy
CodeWars => 6kyu
1) 문제를 읽고 바로 떠올릴 수 있는 풀이
2개의 반복문으로 값들을 더하면서 target이 되는 값들의 index를 return해준다.
function twoSum(numbers, target) {
for (let i = 0; i < numbers.length-1; i++) {
for (let j = i+1; j < numbers.length; j++) {
if (numbers[i] + numbers[j] === target) return [i, j];
}
}
}
2)자바스크립트가 가지고 있는 indexOf를 사용해서도 풀이가 가능하다
function twoSum(numbers, target) {
for (i = 0; i < numbers.length; i++) {
second = numbers.indexOf(target - numbers[i], i+1);
if (second > i) {
return [i, second];
}
}
}
i+1을 해주는 이유 : 다음 index부터 시작하게 하려고
ex) twoSum([123,345,120],465)
i) target - numbers[0] = 465-123 = 342이고 numbers.indexOf(342,1)의 결과값은 -1로 나온다.
ii) 465-345 = 120 numbers.indexOf(120,2) 결과값 2 이때 i는 1
3) 마지막 풀이 object를 사용하는 풀이
function twoSum(numbers, target) {
let num={}
for(let i=0;i<numbers.length;i++){
if(num[target-numbers[i]]!==undefined) return [num[target-numbers[i]],i]
else num[numbers[i]]=i
}
}
indexOf풀이의 원리랑 똑같다
처음 코드를 보면 이해하기 힘든 부분이 if 다음에 return이 바로 나오는 부분일 것이다.
우선 else부분은 : num이라는 obj에 numbers의 값을 key로 index를 value로 저장하는 것을 알았을 것이다.
ex) twoSum([123,345,120],465)
else이후에 num에는 {'123':0,'345':1} 이렇게 저장될 것이다. (i=0,1)
i가 2일때 num[465-120=345] -> return [num[345]=1,2] => [1,2]
728x90
반응형
'알고리즘(Algorithm)' 카테고리의 다른 글
[LeetCode] 1011.Capacity To Ship Packages Within D Days [JS] (0) | 2024.10.24 |
---|---|
[CodeWars] Give me a Diamond [JS / 6kyu] 다이아 찍기 (0) | 2023.02.16 |
프로그래머스 - 영어 끝말잇기[JS] (0) | 2023.02.12 |
프로그래머스 - 숫자의 표현 [JS] (0) | 2023.01.30 |
프로그래머스 - 명예의 전당 (1) | 2023.01.24 |