CodeKata(W1D1)_for문

최진우·2022년 8월 30일
0

 위코드 3주차에 들어서면서 코드카타가 시작됐다.코드카타는 매일 1시간씩 2인 1조로 알고리즘 문제를 풀어나가는 공부 방식이다.
 아직 머리 속에 생각한 내용을 코드로 구현하는게 어려운 나에게는 큰 도움이 될 것 같고, 동시에 자바스크립트도 더 공부할 수 있는 기회일 것 같다. 한편으로는 짝꿍에게 뭔가 미안하고, 스스로 민망할 수도 있어서 부담이 되기도 한다.


문제: 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개 밖에 없다고 가정하겠습니다.

 이 문제를 처음 봤을 때 가장 먼저 떠오른 생각은
nums 배열의 요소를 가지고 2개씩 조합해서 합계가 target과 일치하는지 확인해서, 일치하는 조합을 찾으면 반환하는 방식이었다.
 우선 배열 내에서 2개씩 묶어서 조합하는 방법이 전혀 감이 안와서 구글링을 했는데 forEach 메소드를 활용하는 방법이 있는 것 같았지만, 내용이 어려워 for문을 이용하기로 했다.(짝꿍님의 도움으로..)
 아래는 그 코드 내용이다.

const twoSum = (nums, target) => {
// twoSum 이라는 이름의 함수가 있고, 그 함수는 nums라는 배열과 두 숫자의 합 target을 매개변수로 갖는다.
  
  for(i = 0; i < nums.length; i++) {
  // 첫번째 for문을 돌린다. 변수 i가 0부터 배열의 길이보다 작을 때까지 돌고, i는 조건에 맞지 않으면 1씩 증가한다.
    
    let result = nums[i];
    // result라는 변수를 만들고, i를 인자로 받은 배열의 인덱스로 사용하여 result에 담는다.
    
    for(j = 1; j < nums.length; j++) {
    // 두번째 for문을 돌린다. 이번에는 변수 j가 1부터 시작하여 배열의 길이보다 작을 때까지 돌고, j는 조건에 맞지
 않으면 1씩 증가한다.
    
      if(i !== j && result + nums[j] === target) {
      //  두 개의 for문 뒤에 조건문을 추가한다. i와 j가 같지 않으면서, 방금 담은 result(i가 들어있음)와 현재
 j를 인덱스로한 nums 배열의 요소를 더한 값이 target과 동일하다면 아래의 내용을 반환한다.
      *if문 조건에 i와 j가 같지 않다는 내용이 있기 때문에 사실 j를 사용하는 for문에서 시작 값을 0으로 해줘도
 결과는 동일하게 나왔다.
      
        return [i, j];
        // 바로 위 조건이 참으면 해당 i와 j를 새 배열에 담아서 반환한다.
      }
    }
   }
}

 짝꿍님의 도움으로 첫번째 코드타카를 별 문제없이 해결하긴 했지만, 걱정했던대로 내 자바스크립트 실력을 다시 한 번 깨닫는 계기가 되었다..
 개인적으로 이런 문제를 많이 풀어보는 연습을 해봐야겠다.
 그리고 코드타카 내용은 나중에 봐도 도움이 많이 될 것 같기 때문에 블로깅하기에도 좋은 것 같다!

profile
함께하고 싶은 백엔드 개발자

0개의 댓글