12786번 - INHA SUIT
check배열은 T연산을 최소한 사용했을 때 사용 횟수입니다.
1번 방식은,
현재 확인하고 있는 칸에서 O, A, B, C 연산을 했을 때 이동되는 칸으로 (만약 이동할 수 있고, min(다음칸의 값, 현재칸의 값)일때)현재 칸의 값을 옮기고,
현재칸에서 다음칸으로 T연산을 해서 모든 이동 가능한 칸에 대해 min(다음칸의 값, 현재칸의 값+1)을 저장합니다.
그렇게 해서 마지막 칸의 연산값중 최소값을 찾아서 만약 T이하라면 출력, 아니라면 -1을 출력해줍니다.
2번 방식은,
현재 칸의 값은 지난 칸에서 올 수 있는 모든 경우 중 최소값 이므로... 식을 작성하면 이렇게 될 것 같습니다.
check[j][i] = min( check[j][i-1] , check[j-1][i-1] , check[j+1][i-1] , ( j == 20이라면 check[10~20][i-1], 아니라면 check[j/2][i-1]) , check[1~20][i-1]+1 )
1번 방식은 앞 -> 뒤로
2번 방식은 뒤 -> 앞으로
진행한다고 생각하면 될 것 같습니다.
왜 틀렸을까요 ㅠㅠㅠ 테스트 케이스 만들어서 돌려도 다 맞는거같은데...
방법 2에서,
108번째 라인 if(j==20&&tree[j][i-1]) -> if(j==20) 으로 바꾸니까 맞았습니다!
그런데 방법 1은 도대체 뭐가 문제일까요...? ㅠㅠ
댓글을 작성하려면 로그인해야 합니다.
3038ksh 7년 전
check배열은 T연산을 최소한 사용했을 때 사용 횟수입니다.
1번 방식은,
현재 확인하고 있는 칸에서 O, A, B, C 연산을 했을 때 이동되는 칸으로 (만약 이동할 수 있고, min(다음칸의 값, 현재칸의 값)일때)현재 칸의 값을 옮기고,
현재칸에서 다음칸으로 T연산을 해서 모든 이동 가능한 칸에 대해 min(다음칸의 값, 현재칸의 값+1)을 저장합니다.
그렇게 해서 마지막 칸의 연산값중 최소값을 찾아서 만약 T이하라면 출력, 아니라면 -1을 출력해줍니다.
2번 방식은,
현재 칸의 값은 지난 칸에서 올 수 있는 모든 경우 중 최소값 이므로... 식을 작성하면 이렇게 될 것 같습니다.
check[j][i] = min( check[j][i-1] , check[j-1][i-1] , check[j+1][i-1] , ( j == 20이라면 check[10~20][i-1], 아니라면 check[j/2][i-1]) , check[1~20][i-1]+1 )
그렇게 해서 마지막 칸의 연산값중 최소값을 찾아서 만약 T이하라면 출력, 아니라면 -1을 출력해줍니다.
1번 방식은 앞 -> 뒤로
2번 방식은 뒤 -> 앞으로
진행한다고 생각하면 될 것 같습니다.
왜 틀렸을까요 ㅠㅠㅠ 테스트 케이스 만들어서 돌려도 다 맞는거같은데...