julsnutini   6년 전

dequeue 함수에서 한칸씩 당겨주는 부분에서 런타임 에러가 나는 건가요..??

힌트 좀 주시면 감사하겠습니다.

도와주세요!

djm03178   6년 전

그것도 문제기는 하지만, 딱 한 인덱스 초과하는 거라 그걸로 런타임 에러가 나진 않을 거 같습니다. 어차피 main 함수의 스택에 있는 다른 변수 정도일 테니까요. 안전하게 하려면 4번째 줄을 100으로 바꾸는 게 좋겠죠.

진짜 문제는 서로 연결된 컴퓨터의 정보는 100개를 초과할 수 있다는 점입니다. 정확히는 최대 num(num-1)/2개까지 존재할 수 있습니다.

julsnutini   6년 전

q[5000][2] = { 0 } 이렇게 잡아주면 될까요..?

djm03178   6년 전

제가 코드를 잘못 읽었었네요.

num*(num-1)/2개가 아니라 com*(com-1)/2개이고 num이 그만큼까지 될 수 있는 것입니다. 배열 크기는 맞게 잡아주신 것 같네요.

그런데 dequeue 부분을 바꾸셔서 더 이상 큐가 아니라 스택처럼 되어버린 것 같네요...

djm03178   6년 전

직접 고쳐보니 잘못된 곳이 너무 많네요.

  1. 일단 방금 올리신 건 큐가 아니라 스택이니 이거 말고 처음에 올리셨던 코드 기준으로 하곘습니다. 지금의 dequeue 함수는 큐에 있는 원소의 수만큼의 시간이 걸려서 비효율적입니다. 이 문제에서는 제한이 작아서 괜찮지만, 앞으로는 원형 큐나 링크드 리스트를 이용해서 큐를 구현하시는 게 좋겠습니다.
  2. q[0][0]이 1번 컴퓨터라는 보장은 없습니다. 따라서 q[0][0]이 아니라 1을 queue[0]에 넣고 시작해야 맞습니다.
  3. 연결은 양방향입니다. 그래서 first == q[i][0] 뿐만 아니라 first == q[i][1]이고 q[i][0]을 아직 방문하지 않은 경우도 고려해주어야 합니다.
  4. 마지막에 수를 셀 때 1은 제외하고 세야 합니다.
  5. 아래 코드에서 100을 포함하게 바꾸신 건 잘 하셨습니다.

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