본문 바로가기
to be 개발자

[알고리즘_자바] Two sum 배열 안에서 더해서 제시된 수를 만들 수 있는 두 수의 인덱스 구하기

by 아셀acell 2020. 9. 19.
반응형

배열 안에서 더해서 타겟을 만들 수 있는 수를 구해야 한다 - 라고 생각하니 어려웠지만

포문을 돌려서 배열[0] 수부터 비교해본다 - 라고 생각하니

 

10 - 앞의 수가 나머지 배열 숫자 중에 있는지 확인하면 되겠구나 - 가닥이 잡혔다.

 

그리고 앞에서부터 다 비교를 해 나갈 것이니

굳이 뒤의 수와 비교할 필요는 없었다. 굿!

 

문제

 

int[] nums = {2,8,11,21};

int target = 10;

 

풀이

 

public class test0912 {

 

public static void main(String[] args) {

 

test0912 test = new test0912();

 

//Two Sum

int[] nums = {2,8,11,21};

int target = 10;

 

int[] result = test.solve(nums, target);

 

for(int i:result) {

System.out.print(i+" ");

}

 

}

 

public int[] solve(int[] a, int b) {

 

//담을 그릇 정하기 

Map<Integer,Integer> map = new HashMap<>();

int[] c = new int[2];

 

//for

for(int i=0;i<a.length;i++) {

   if(map.containsKey(a[i])) {

      int value = map.get(a[i]);

      c[0] = value + 1;

      c[1] = i + 1; //nums[i] 즉 i 자리에서 8을 찾은 것이므로 i+1을 바로 인덱스로 줄 수 있다

   } else {

      map.put(b-a[i], i);

// nums[0]은 2이지만 2를 넣어봤자 8을 찾기 어렵다. 8을 넣어두면 그냥 containsKey로 손쉽게 찾을 수 있음

//key 10-2=8 value 0 (2의 배열 자리수)

 

   }

}

 

return c;

}

}

 

 

 

 

728x90
반응형
LIST

댓글