inflearn logo
강의

講義

知識共有

10週間完成 C++ コーディングテスト | アルゴリズムコーディングテスト

3-Gとテストケースのヒント

3-G번 질문있습니다.

467

mim0107

投稿した質問数 1

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

3-G 문제에서 정점에 이미 방문한 경우

(현 정점 거리 +1 == 다음 정점 거리) 인 경우만 체크해주는데

(현 정점 거리 +1 < 다음 정점 거리) 인 경우는 존재하지 않아서 체크하지 않는 건가요??

궁금해서 질문드립니다. 감사합니다.

 

c++ 코딩-테스트 C++ 코테 준비 같이 해요!

回答 3

0

kundol

mim0107님 ㅎㅎ 답변 수정해서 다시 댓글로 달았어요~ 참고 부탁드려요

0

kundol

안녕하세요 mim님 ㅎㅎ

(현 정점 거리 +1 < 다음 정점 거리) 인 경우는 존재하지 않아서 체크하지 않는 건가요??

>> 존재하지 않습니다.(수정 :: 밑 댓글에 서술)

 

if (!visited[next]) {
                    q.push(next); 
                    visited[next] = visited[now] + 1;
                    cnt[next] += cnt[now];
                } else if (visited[next] == visited[now] + 1) {
                    cnt[next] += cnt[now];
                }

이부분을 말씀하시는거죠? 여기서 visited[next] == visited[now] + 1 일 때 cnt += cnt[now]요.

이건 뭐냐면 최단거리로 가는데. 똑같은 경우의 수가 하나 더를!! 찾은 경우입니다.

이 문제의 경우

가장 빠른 시간으로 찾는 방법이 몇 가지 인지 구하는 프로그램을 작성하시오.

즉, 방법을 몇가지인지를 찾는 문제죠?

자 2초만에 a라는 정점을 오는 경우의 수가 있습니다. 그러면 a라는 정점은 visited가 되어있겠죠? 2로 색칠되어있을 겁니다.

근데 또 갑자기 b에서 a로 가는데 2초만에 a라는 정점을 오는 경우의 수가 생기겠죠. 이 경우

visited[b] + 1 == visited[a]라는 조건이 성립하게 됩니다.

그래서 저런식으로 해서 최단거리인데!! 해당 방법의 수를 더하는 로직을 완성시킬 수 있는 것이죠.

 

감사합니다.

1

mim0107

친절한 답변 감사합니다.

그런데 답변해주신 것처럼 visited[next] > visited[now] + 1 이 존재한다면

기존에 visited[next]에 저장해둔 시간보다 next 정점으로 가는 더 빠른 루트가 존재한다는 거

아닌가요?? 만약 존재한다면 값을 업데이트 해줘야 할 것 같다는 생각이 들어서 질문드립니다.

2

kundol

아 답변 변경하겠습니다. ㅎㅎ;

(현 정점 거리 +1 < 다음 정점 거리) 인 경우는 존재하지 않아서 체크하지 않는 건가요??

>> 해당부분은 존재하지 않습니다.

이는 가중치가 같은 그래프를 BFS로 탐색해서 그런데요. BFS로 가중치가 같은 그래프를 탐색하게 되었을 때 방문되는 정점은 최단거리가 됩니다. 이 문제는 +1, -1, * 2든 1초가 걸리는 가중치가 같은 그래프입니다. 따라서 BFS로 방문하는 정점은 최단거리가 됩니다.

지금 보시면

1에서 2로 가는 경우 1 + 1을 통해 2를 2초만에 가는게 가장 빠른 경우의 수죠? 그 다음 * 2로도 갈 수 있기 때문에 경우의 수인 cnt가 +가 됩니다.

1에서 2로 가는 수중 이보다 더 빠른 경우의 수는 없습니다.

해당 부분 그림으로 그려봤는데요.

참고 부탁드립니다.

image

0

wukddang1948

저도 mim0107님이 질문해주신 부분이 궁금합니다..

2주차 개념#12 트리 순회

0

18

2

백준사이트가 종료된다고 합니다.

0

223

2

백준 서비스 종료

9

708

1

sk 하이닉스 코테 대비

0

351

2

3-G 최댓값 질문

0

49

1

모듈러 연산 값이 10이 아닌 경우도 있지 않나요?

0

82

2

3-I 코드 질문드립니다.

0

61

2

3-N 질문 있습니다.

0

65

2

학습방법

0

100

2

4-H 질문 있습니다 (코드 리뷰)

0

66

2

코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.

0

163

2

2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.

0

69

2

2주차 개념 #4-2. 인접행렬 질문있습니다.

0

63

2

1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.

0

49

2

조합 재귀 풀이 확인 해주시면 감사하겠습니다.

0

67

2

함수별 시간복잡도

0

72

2

3-h 질문입니다.

0

49

1

안녕하세요 선생님. 시간 복잡도 4번 질문있습니다.

0

52

2

1-I 문제 질문 드립니다.

0

76

2

2-P 질문입니다.

0

56

1

mac에서 시작하기 관련

0

87

2

5-Q 질문

0

62

2

풀이 코드 질문

0

62

2

맞왜틀

0

68

2