inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 코딩테스트 - it 대기업 유제

5. "공 굴리기" 문제 해법

BFS로 풀이

277

밥준

작성한 질문수 2

0

강사님, 안녕하세요. 강의 잘 듣고 있습니다.

공굴리기 문제를 간선의 가중치가 모두 1이라고 간주하고,

한 칸씩 이동하면서 distance[다음 정점] = distance[현재 정점] + 1 을 해주는 식으로 BFS를 활용해 풀어도 되는지 궁금합니다.

다익스트라와 BFS 2 개 방식의 효율성(시간복잡도) 차이는 어떻게 되나요?

java 코딩-테스트

답변 2

0

김태원

안녕하세요^^

이 문제는 공이 한 방향으로 굴러가다가 벽을 만나면 멈추는 방식으로 이동합니다. 그래서 한 칸씩 이동하면서 distance[다음 정점] = distance[현재 정점] + 1 을 해주는 방식으로는 안됩니다.

아래 입력의 경우 공이 board[1][0]에서 board[3][1]로 이동하는 경로는 [1, 0] - [1, 1] - [1, 2] - [1, 3] - [2, 3] - [3, 3] - [3, 2] - [3, 1]과 같이 7번의 이동으로 도착해야 합니다. 그런데 stance[다음 정점] = distance[현재 정점] + 1과 같이 이동하면 [1, 0]에서 [3, 1]로 가는 최단경로를 [1, 0] - [1, 1] - [2, 1] - [3, 1]로 3번의 이동으로 갈 수 있다고 해법립니다.

구체적인 코드를 봐야 알겠지만 다익스트라와 BFS 2개의 시간복잡도 차이는 크지 않다고 생각합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요. 공굴리기 문제에 대한 질문이군요.

강의에서 설명한 대로, 간선의 가중치가 모두 1이라면 BFS를 활용하여 문제를 풀 수 있습니다. 각 정점까지의 최단 거리를 구하는 BFS 방식을 사용하면 됩니다. 각 정점까지의 최단 거리를 저장하는 distance 배열을 사용하여, 현재 정점에서 다음 정점으로 이동할 때마다 distance를 업데이트해주면 됩니다.

다익스트라 알고리즘과 BFS의 시간복잡도에 대해서 설명드리면, 다익스트라 알고리즘은 최단 경로를 구하는 알고리즘으로서, 우선순위 큐를 사용하여 최단 거리를 유지하면서 정점을 선택하는 방식입니다. 이에 반해, BFS는 너비 우선 탐색을 하는 알고리즘이기 때문에 큐를 사용하여 탐색하는 방식입니다.

따라서, 다익스트라 알고리즘은 각 정점을 한 번씩 방문하기 때문에 O(V)의 시간복잡도를 가지고 있고, 간선의 개수에 따라 O(ElogV)까지 소요될 수 있습니다. 반면에 BFS는 인접한 정점을 모두 탐색하기 때문에 각 정점에서 인접한 간선을 한 번씩 방문하는 특성을 가지고 있어서, 간선의 개수에 따라 O(V+E)의 시간복잡도를 가집니다.

따라서, 간선의 개수가 적은 경우에는 양쪽 모두 유사한 성능을 보일 수 있지만, 간선의 개수가 많은 경우에는 다익스트라 알고리즘이 더 효율적이라고 할 수 있습니다.

프로그래밍에서는 일반적으로 간선의 가중치가 모두 동일한 경우에는 BFS를 사용하는 경우가 많습니다. 하지만, 간선의 가중치가 다른 경우에는 다익스트라 알고리즘을 사용해야 정확한 최단거리를 구할 수 있습니다.

효율성 측면에서는 다익스트라 알고리즘이 더 우수한 성능을 보여줄 수 있으므로, 간선 가중치가 다른 경우에는 다익스트라 알고리즘을 고려해보시는 것이 좋습니다.

다른 문의 사항이 있으시면 언제든지 물어보세요!

비밀번호

0

67

1

과일 가져가기 이러한 경우에는 반례가 생기지 않나요?

0

163

2

cpu 스케줄링

0

106

2

외부 문제 질문

0

122

2

가장 많이 사용된 회의실

0

118

2

심사위원 문제 시간복잡도 질문

0

127

1

현관문 출입순서

0

98

1

미로의 최단거리 통로

0

74

1

집으로 이동 문제 코드

0

125

1

채점 사이트 개설

0

161

2

송아지를 잡자

1

110

1

다익스트라 + 환승횟수

0

135

2

문제풀이 해설 질문입니다.

0

124

2

"이동 횟수" 문제가 변형된다면?

0

156

2

예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ

0

248

1

"비밀번호" 문제 확인 부탁드립니다!

0

171

1

최대 길이 연속수열 질문

0

193

1

잃어버린 강아지 문제 count 관련 질문있습니다

0

203

1

바둑대회 질문입니당

0

222

1

5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다

0

311

1

알파코드 풀이질문입니다

0

218

1

7번 비밀 번호 문제에 시간복잡도가 궁금합니다!

0

164

1

혹시 이렇게 작성해도 괜찮나요?

0

287

2

문제풀이 확인 부탁드립니다.

0

245

1