처음에는 이 로직을 bfs가 아닌 구현문제라고 생각했다.
전체 로직은 비슷하지만, 1의 자리가 5일때는 그냥 내림하는게 최솟값일 줄 알았다.
그래서 테스트케이스도 대부분 통과했지만, 딱 3개가 통과를 못하는것이다 ㅜㅜ
질문하기 코너에서 반례를 몇개 주워보는 과정에서, 내 로직을 딱 관통하는 반례를 발견했고 코드를 엎어야겠다..라는 생각밖에 들지 않았다 ㅋㅋㅋ
그리하여 bfs를 바로 채택하고 통과!
import java.util.*;
class Ev {
int now;
int depth;
Ev(int now, int depth) {
this.now = now;
this.depth = depth;
}
}
class Solution {
public int bfs(int storey) {
Queue<Ev> q = new LinkedList<>();
q.add(new Ev(storey, 0));
int result = 10000000;
while(!q.isEmpty()) {
Ev ev = q.poll();
int now = ev.now;
int level = ev.depth;
if(now == 0) {
if(result > level)
{
result = level;
}
continue;
}
int num = now % 10;
if(num > 5) { //5보다 크면 걍 반올림
q.add(new Ev(now / 10 + 1, level + 10 - num));
}
else if(num == 5) {
q.add(new Ev(now / 10, level + num)); //내림
q.add(new Ev(now / 10 + 1, level + 10 - num)); //반올림
}
else {
q.add(new Ev(now / 10, level + num));
}
}
return result;
}
public int solution(int storey) {
int answer = bfs(storey);
return answer;
}
}