본문 바로가기

코딩테스트 연습/JAVA

[LeetCode/Java] Two Sum(두 수의 합) 풀이

반응형

🖥 사용 언어: Java 자바

 

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order.

 

 

 

 

 

⌨️ 나의 풀이

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];

        for (int i = 0; i < nums.length; ++i) {
            for (int j = i+1; j < nums.length; ++j) {
                if (nums[i] + nums[j] == target) {
                    result[0] = i;
                    result[1] = j;
                    break;
                }
            }
        }
        
        return result;
    }
}

 

 

📉 Runtime

0ms 가 나왔다던 샘플 코드는 아래와 같았다.

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for(int i = 1; i < nums.length; i++) {
            for(int j = 0; j + i < nums.length; j++) {
                if(nums[j] + nums[j + i] == target) {
                    return new int[] {j, j + i};
                }
            }
        }
        return new int[] {};
    }
}

위 코드처럼 처음에 배열 선언 안하고, 바로 리턴해줘도 괜찮은 것 같다. 다만 두번째 for문에서 j + i < nums.length로 한 게 얼마나 영향이 있었던건지, 또 i가 0이 아닌 1부터 시작한 이유에 대해선 좀더 생각해봐야할 것 같다.

 

 

📈 Memory

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] numsCopy = new int[2];
        for(int m = 0; m< nums.length; m++){
            int currentNumber = nums[m];
            for(int i = m + 1; i < nums.length; i++){
                if(currentNumber + nums[i] == target){
                    numsCopy[0] = m;
                    numsCopy[1] = i;
                    break;

                }
            }
        }
        return numsCopy;

    }
}

위 코드가 내 코드보다 좀더 빨랐는데, 차이는 currentNumber를 만들었는데, 얕은 나의 지식으로는 변수를 생성하면 메모리를 더 차지할 줄 알았는데 아니었다. 매번 이전꺼를 다시 찾아야해서 그런건가....

반응형