inflearn logo
강의

Course

Instructor

Do it! Algorithm Coding Test with C++

Graph Representation

백준 2251 C++ 질문 있습니다.

398

starkshn

134 asked

0

해당 강의가 없어 직접 질문 하게 되었습니다.

2251번 책을 보면 이동 가능한 경로가

A -> B, A ->C, B -> A, B -> C, C -> A, C ->B 로 총 6개인것은 이해를 했습니다.

 

근데 최초의 물이 C에만 담겨있는데 왜

sender, receiver를 6크기의 배열로 선언해주고 아래처럼 for문을 돌리고 없는 물을 처음에 6개의 경로에 따라 퍼다 나르는지 이해가 잘 가지 않습니다.

for (int k = 0; k < 6; ++k)

{

// next[0] = a, next[1] = b, next[2] = c

int next[] = { a, b, c };

next[Receiver[k]] += next[Sender[k]];

next[Sender[k]] = 0;

// 대상 물통의 용량보다 물이 많아 넘칠 때

if (next[Receiver[k]] > now[Receiver[k]])

{

// 초과하는 만큼 다시 이전 물통에 넣음

next[Sender[k]] = next[Receiver[k]] - now[Receiver[k]];

// 대상 물통은 최대로 채움

next[Receiver[k]] = now[Receiver[k]];

}

// A와 B의 물의 양을 통하여 방문 배열 체크

if (visit[next[0]][next[1]] == false)

{

visit[next[0]][next[1]] = true;

q.push(make_pair(next[0], next[1]));

// A의 물의 양이 0일 때 C의 물의 용량을 정답 변수에 저장

if (next[0] == 0)

{

ret[next[2]] = true;

}

}

}

c++ 코딩-테스트 알고리즘

Answer 2

0

starkshn

설명해주시니 이해가 좀 더 된거 같습니다.

바쁘실텐데 답변 해주셔서 감사합니다

새해복 많이 받으세요~~ :)

0

harucoding

안녕하세요. 반갑습니다 🙂

각 상태에서 물이 이동 가능한 경로인 6개를 모두 체크하기 위해 for문이 실행된다고 생각해주시면 좋을 것 같습니다. 해당 반목문은 최초 상태뿐 아니라 추후 진행되는 모든 상태마다 계속 체크가 됩니다.

 

최초 상태도 하나의 상태이기 때문에 따져보면

0 0 10 의 상태에서

A -> B, A ->C, B -> A, B -> C 이 4개의 상태는 A와 B의 물이 없기 때문에 실제로 무시가 됩니다.

(// A와 B의 물의 양을 통하여 방문 배열 체크

if (visit[next[0]][next[1]] == false)

실제로 해당 if문에서 걸러질 것입니다. )

C -> A, C ->B 만 실제로 물통 값의 변화를 일으키게 되고 여기에 따라

8 0 2, 0 9 1 의 중간 상태가 만들어 집니다.

그러면 이 각각의 상태에서도 또 해당 반복문을 통하여 각각 6개의 경로를 따져보게 됩니다.

이러한 방식으로 큐가 비어질 때 (더이상 탐색할 부분이 없을 경우)까지 진행하게 되고,

탐색한 데이터들 중 A의 값이 0일때의 C의 값들을 찾아 오름차순으로 정렬하여 주면

해당 문제를 해결 할 수 있습니다.

 

도움이 되셨으면 좋겠습니다.

새해복 많이 받으세요 :)

수강평 이벤트

0

15

2

Reticle이 안나옵니다.

0

5

1

진행 방법 질문드립니다!

0

23

2

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

18

1

Singleton 관련 질문입니다.

1

27

2

갑자기 채점 사이트가 바뀌었어요

0

19

1

42. [세그먼트 트리 실전 문제] 구간 합 구하기3 (백준 2042)

0

64

1

10986번 질문 있습니다!

0

45

0

LCA 빠르게 찾기 - 트리의 높이에 따른 k값 질문

0

119

0

백준 1377 질문있습니다

0

218

1

백준 1722 교재 81 질문

0

330

1

백준11505, 교재 73번

0

282

1

백주 1456번

0

200

1

백준 1325, 교재 47번 문제 질문입니다.

0

358

1

백준 11404 플로이드 문제 질문있습니다.

0

260

1

문제 85번 질문드립니다

0

322

1

백준 13023 질문있습니다.

0

204

1

문제 8번 질문드립니

0

305

1

백준 1876여행 유니온 파인드 질문있습니다.

0

241

1

퀵정렬 질문

3

291

1

i==k일떄 i++안해도되지않나요

0

436

1

알고리즘 코딩테스트 문제풀이 강의 - 14 절댓값 힙 구현하기 (백준 11286)

0

550

1

알고리즘 코딩테스트 문제풀이 강의 - 9 DNA 비밀번호 (백준 12891)

1

573

1

C++은 실전문제에 대한 강의가 없나요? 자바나 파이썬은 있는데 없는거 같아서요.

2

591

2