본문 바로가기

개발중/Algorithm

MoveZero

728x90
반응형

MoveZero

 

루틴

  1. 합이 10 을 구하고 싶으니까
  2. 10 - 2 를 한다
  3. 결과인 8을 찾아 낸다
  • map 과 array를 사용한다.
  • 문제의 의도 : index를 찾는다.

 

생각해보자.

{ 2, 8, 11, 21 }

target = 10;

  • index를 0부터 for 문을 돌린다.
  • 10 - 2를 했는데 8이 나온다
  • 8을 map에 등록을 한다.
  • ( 8, 1 ) => key, value
  • index 를 돌려서 맵에 있는 것과 매치가 된다면 index 를 구한다.
import java.util.HashMap;
import java.util.Map;

public class TwoSum {
	public static void main(String[] args) {
		
		int[] nums = {2, 8, 11, 21};
		int target = 10;
		
		TwoSum a = new TwoSum();
		
		int[] result = a.solve(nums,target);
		for( int i : result) {
			System.out.println(i);
		}
	}
	
	public int[] solve( int[] nums, int taget ) {
		
		// 담을 그릇
		Map<Integer, Integer> map = new HashMap<>();
		int[] result = new int[2];
		
		for( int i=0; i < nums.length; i++) {
			if( map.containsKey(nums[i])) {
				int mapValue = map.get(nums[i]);
				
				result[0] =  mapValue+1;
			    result[1] = i+1;
			    		
			}else {
				map.put(taget-nums[i], i);
			}
		}
		return result;
	}
}

 

이 문제를 풀면서 내가 알지 못했던 부분을 알게 된 것은

map.containsKey(num[i]) 

 

이 containsKey key를 검사해서 안에 값이 존재하는지 안하는지를 체크하는 클래스였다.

 

존재하는 값이 있다면 true를 반환해서 if문이 실행이 된다

 

 

 

 

 

 

근데 여기서 드는 의문점은, if문에 false이면 즉, 8이 아니라면?

당연히 else 문이 실행 되지 않을까?

 

그러면 map 의 카 키 값은 계속 갱신이.. 아.. 추가가 되는거구나 ㅎㅎㅎㅎㅎㅎ

 

8이 아니라면 10을 빼고 key 값으로 넣어주는구나!

 

그리고 다시 if 문 검사를 할 때에 nums[i]  값 중에서 key 값이 존재한다면!!!!!!!!!!!!!!!!!!!!!!!

오와오아와아아ㅏ아아아!!

 

씐난다, 그렇구나 I'm Okey very very good 

728x90
반응형

'개발중 > Algorithm' 카테고리의 다른 글

MeetingRoom2  (0) 2020.08.25
Merge 알고리즘  (0) 2020.08.24
Daily Temperature  (0) 2020.08.23
MoveZeros  (0) 2020.08.23
MeetingRooms  (0) 2020.08.23