[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
- 너무 한쪽에 꽂혀서 생각하지말고 다방면으로 생각하기 위해 노력해야겠다.. 그러기위해서는 문제를 더 많이 풀어봐야겠지