[leetcode] Two Sum
추천 받은 릿코드
트위터에서 누가 530일 동안 매일 알고리즘을 풀었다고 쓴 글을 봤다.
나도 매일매일 하루 한 문제라도 꼭 풀어봐야겠다.
오늘 처음 한 문제 풀어봤다.
인프런으로 자바스크립트 코딩 테스트 강의를 듣고 있는데 섹션10까지 있는데 이제 2까지 들었다.
이것도 병행해서 매일 풀어볼까 한다. Easy만 522문제나 있네 와우
10문제씩 풀면 2달에 풀 지 않을까
여튼 그렇게 먼저 도전한 문제는 Two Sum이다.
난이도를 Easy에 고정하고 풀었다.
https://leetcode.com/problems/two-sum/
Two Sum - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
최근에 배운대로 먼저 좀 생각해보고 어렵지 않은 문제 같아서 바로 코딩했다.
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let answer = [];
for(let i=0; i < nums.length; i++){
for(let j= i+1; j < nums.length; j++){
if((nums[i]+nums[j]) === target){
answer.push(i)
answer.push(j)
}
}
}
return answer;
};
처음 제출 때 아무 생각 없이 nums.length -1을 썼다가 중간에 있는 테스트에서 걸렸다. 뭐지? 하고 보니 내가 무의식적으로 -1을 붙였군 싶었다.
새벽에 코딩하면 안된다.
여튼 이렇게 문제 풀었는데 보니까 토론 게시판이 있었다.
굉장히 싱크빅한 코드를 봤는데 순간 어떤 코드인지 잘 해석이 안됐다.
const twoSum = (nums, target) => {
const map = {};
for (let i = 0; i < nums.length; i++) {
const another = target - nums[i];
if (another in map) {
return [map[another], i];
}
map[nums[i]] = i;
}
return null;
};
보니까 첫 반복 돌 때, another에 타겟값에서 nums배열의 첫 번째 값을 빼고, map은 비어서 if문이 안도는 거 같고, map[nums[i]] = i 에서 {'값': '인덱스'} 요런 식으로 들어가는 거 같다.
두 번째 반복 돌 때, another에 타겟값에서 nums배열의 두 번째 값을 빼고, 이번에는 map이 있는데 그 안에 another가 있으면 map의 값과 현재의 nums[i]를 더한게 target이니까 원하는 값을 찾은 거다. 인덱스를 배열에 담아 리턴하라 했으니 map에 another 값으로 인덱스를 찾고, 지금의 i를 두 번째에 담아주면 된다. 안나오면 다시 map에 두번째 값과 인덱스를 넣어준다.
이렇게 하면 이중 for문을 돌지 않아도 되네!! 와우!
뭔가 배열에 익숙하지 않기도 한데 이런 생각은 어떻게 하는 거지?
이렇게 첫 릿코드 후기였다.
야호~!