[Coding test] 0128_no.2 (java)

2020-02-03

Coding test / 0128_no.3

문제설명

유출 x

풀이

public class t3 {
	
	static public int solution(int nums[]) {
		int stop[] = new int[nums.length];
		int stopnum = nums.length-1;
		
		boolean check = false;
		Queue<Integer> qu = new LinkedList<Integer>();
		
		qu.offer(0);
		
		while(!qu.isEmpty()) {
			int pop = nums[qu.peek()];
			int idx = qu.poll();
			
			int front = idx + pop;
			int back = idx - pop;
			
			if(front == stopnum || back ==stopnum) {
				if(front == stopnum)
					return stop[idx] + 1;
				else
					return stop[idx] + 1;	
			}
			
			//+0 -0이기 때문에 더 갈 곳이 없으므로 pop 해준다
			if(pop == 0)
				continue;
			
			if(front>=0 && front<nums.length && (back<0 || back>=nums.length)) {
				//front만
				qu.offer(front);
				stop[front] = stop[idx] + 1;
				
			}
			else if(back>=0 && back<nums.length && (front<0 || front>=nums.length)) {
				//back만
				qu.offer(back);
				stop[back] = stop[idx] + 1;
			}
			else if((front>=0 && front<nums.length) && (back>=0 && back<nums.length)) {
				//front & back 둘 다
				qu.offer(front);
				qu.offer(back);
				
				stop[front] = stop[idx] + 1;
				stop[back] = stop[idx] + 1;
			}
		}
		
		//qu가 return에 걸리는 것 없이 empty돼서 빠져나오면 도달 못한다는 뜻이니까 -1 return한다...는 무한루프 해결 못함
		return -1;
	}
	
	public static void main(String[] args) {
		int n[] = {4,1,2,3,1,0,5};
		
		System.out.println("answer = " + solution(n));
	}
}

후기 (2h)

dfs로 풀려고 오만 난리를 다친 문제.. dfs에 빠져서 무한루프를 돌때를 해결하지못해 결국 해결하지 못했다가 지인의 아이디어를 통해 문제를 풀 수 있었다!

하지만 사실 다 풀었다기엔 테스트케이스가 너무 적고,

목적지에 도달하지 못하는 경우 -1를 return 한다를 해결하지 못했다….!


tip

  1. 너무 한쪽에 꽂혀서 생각하지말고 다방면으로 생각하기 위해 노력해야겠다.. 그러기위해서는 문제를 더 많이 풀어봐야겠지