minu0122   5년 전

이 코드는 d 첫번째칸에 각 건물을 짓는데 걸리는 시간을 저장하고 두번째칸에 이 건물의 짓는 시간이 최종적으로 정해졌는지의 여부를 0과 1로 나타냅니다. d의 두번째칸은 건물 짓는 순서를 받아들일때 예를 들어 1 2 이러면 d[1][1] = 0 으로 바뀝니다. 이렇게 뒤에 언급되는 건물들은 모두 0으로 바뀌고 언급이 안되면 1로 가만히 놔두어집니다(언급이 안된건 바로 지을수 있는 건물이라서 확정).node에는 몇번째 건물을 지으려면 몇번째 건물이 지어져야 하는지에대한 정보를 저장합니다. 즉, 어떠한 건물에 대해서 이 건물을 지어야하기위해 지어지는 건물들을 모두 검색한다음 모두 d의 두번째칸이 1이면 모두 확정이므로 이중 가장 오래걸리는 값을 지을 건물에 더해줍니다. 이렇게 하나씩 확정해나가다가 목표 건물에 도달하여 목표건물의 d의 두번째칸이 1이면 loop에서 나가고 그 값을 출력합니다.

변수 의미들

t: 테스트케이스 갯수

n: 건물수

k: 노드갯수

a: 먼저지어야할 건물

b: 그다음 지을 수 있는 건물

x: 목표건물

d: 첫째칸은 index+1 번째 건물을 짓는데 걸리는 시간, 둘째칸은 이 건물 건설시간의 확정 여부(0 미확정,1 확정)

node: index(1)+1건물을 지어야 index(2)+1 건물을 지을수 있다는 정보를 가지고 있음

node[a][a] 에는 a+1번째 건물을 짓는데 몇개의 건물들을 지어야하는지에 대한 갯수가 들어있습니다. 나중에 count변수에서 이 건물을 짓기전 건물중 몇개가 확정된 시간인지 체크하고 그 갯수를 더해서 node[a][a]값과 같으면 d[a][0]의 값을 업데이트하고 d[a][1]에 1을 넣어줍니다.

여기서 오류나 예외가 난다면 어떻게 날수 있을까요?

djm03178   5년 전

반례를 구하기보다는 코드의 로직을 설명해서 로직 자체의 문제나 로직대로 구현되지 않은 부분이 있는지를 묻는 것이 더 좋습니다.

그냥 아무 랜덤 데이터나 넣는 건 혼자서도 할 수 있고, 답변자들도 별로 재미가 없기 때문입니다.

minu0122   5년 전

죄송합니다 다시 바꿨습니다

댓글을 작성하려면 로그인해야 합니다.