강의

멘토링

커뮤니티

Inflearn Community Q&A

zerobaseone's profile image
zerobaseone

asked

The secret to passing 38 companies: Essential algorithms for the 2025 coding test

5-2. LINE Internship Recruitment Coding Test

문제 풀이 방식 관련 질문입니다!

Resolved

Written on

·

49

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요? 5-2. LINE 인턴 채용 코딩테스트

  • 어떤 알고리즘을 학습하고 계신가요? DFS, BFS

  • 여기까지 이해하신 내용은 무엇인가요? DFS, BFS의 기본 개념

 

2. 어려움을 겪는 부분

  • 어떤 개념이 헷갈리시나요?

 여기서 문제를 푸실 때 완전탐색을 해야한다. 그래서 BFS를 사용하고자 큐를 사용하신 것까지 이해 했습니다! 근데 완전탐색의 경우 DFS를 사용해야하는게 아닌가..?라는 의문 때문에 질문을 하게되었습니다. 이 문제에서는 DFS나 BFS 둘 중 아무거나 써도 되는 것인가요?

또한 어떤 경우에 DFS를 써야하고 BFS를 써야하는지 잘 모르겠습니다...

 

이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊

python코딩-테스트알고리즘data-structure

Answer 2

0

dingcodingco님의 프로필 이미지
dingcodingco
Instructor

안녕하세요 zzzb1님 좋은 질문 감사합니다! 완전탐색에서 DFS와 BFS를 구분하는 건 처음엔 정말 헷갈리는 부분인데, 이런 의문을 갖는 것 자체가 개념을 깊이 이해하려는 좋은 신호입니다.

1. 이 문제에서 BFS를 쓴 이유

"나 잡아 봐라" 문제의 핵심을 다시 보면, "게임이 끝나는데 걸리는 최소 시간을 구하시오"라고 되어 있어요. 여기서 "최소"라는 키워드가 아주 중요합니다.

4주차 교재에서 배운 내용을 떠올려 보면, BFS는 현재 위치에서 갈 수 있는 모든 경우를 한 단계씩 펼쳐보면서 탐색하기 때문에, 가장 먼저 도달한 답이 곧 최단 경로(최소 시간)가 됩니다. 마치 연못에 돌을 던졌을 때 파문이 동심원으로 퍼지는 것처럼, 1초 후의 모든 위치 → 2초 후의 모든 위치 → 3초 후의 모든 위치... 이렇게 시간 순서대로 탐색하니까, 코니를 처음 만나는 순간이 바로 최소 시간이 되는 거예요.

반면 DFS로 풀면 한 경로를 끝까지 따라가 버리기 때문에, 처음 찾은 답이 최소라는 보장이 없어요. 예를 들어 3초 만에 잡을 수 있는데, DFS가 먼저 20초짜리 경로를 탐색해버릴 수 있는 거죠. 결국 모든 경로를 다 탐색한 뒤에 비교해야 해서 비효율적입니다.

2. 그러면 완전탐색 = DFS 아닌가요?

완전탐색은 "모든 경우의 수를 빠짐없이 탐색한다"는 뜻이지, 반드시 DFS를 써야 한다는 뜻은 아니에요. DFS도 완전탐색이고, BFS도 완전탐색입니다. 둘 다 모든 경우를 탐색하는 건 같고, 탐색하는 순서만 다른 거예요.

DFS는 한 갈래를 끝까지 파고든 뒤 되돌아오는 방식이고, BFS는 현재 단계에서 갈 수 있는 모든 곳을 먼저 살펴본 뒤 다음 단계로 넘어가는 방식입니다. 둘 다 결국 모든 경우를 보긴 하지만, 문제가 요구하는 것에 따라 더 적합한 쪽이 달라지게 됩니다

3. DFS vs BFS 선택 기준

실전에서 판단하는 방법을 정리하면 이렇습니다.

BFS를 쓰는 경우는 문제에서 "최소", "최단", "가장 빠른"이라는 키워드가 보일 때예요. BFS는 단계별로 탐색하기 때문에 처음 도달한 답이 곧 최소가 됩니다. 이번 LINE 문제처럼 "최소 시간"을 구하는 문제, 미로에서 최단 경로 찾기, 최소 횟수로 목표에 도달하기 같은 문제가 여기에 해당합니다.

DFS를 쓰는 경우는 모든 경우의 수를 다 만들어봐야 하거나, 경로 자체를 기록해야 할 때예요. 예를 들어 순열/조합 만들기, 백트래킹으로 조건에 맞는 모든 해 찾기, 그래프에서 연결 요소 찾기 같은 문제가 여기에 해당합니다. DFS는 재귀적 구조와 잘 맞아서 "선택 → 탐색 → 되돌리기" 패턴을 구현하기 편하거든요.

간단하게 기억하면 이래요: "최소/최단을 찾아라" → BFS, "모든 경우를 만들어라 / 경로를 추적하라" → DFS

4. 이 문제에서 DFS를 쓰면 안 되나요?

이론적으로 DFS로도 풀 수는 있지만, 실전에서는 좋지 않습니다. 브라운이 매 초마다 3가지 선택지(B-1, B+1, 2*B)가 있고 위치 범위가 0~200,000이라서, DFS로 한 경로를 끝까지 파고들면 엄청나게 깊어질 수 있어요. 최소 시간을 보장하려면 결국 모든 경로를 다 탐색해서 비교해야 하니 시간적으로도 불리합니다.

BFS는 시간 단위로 탐색하니까 코니를 처음 만나는 순간 바로 답을 반환할 수 있어서 훨씬 효율적입니다

 

처음엔 DFS와 BFS 선택이 막막할 수 있는데, 문제를 몇 개 더 풀다 보면 "아, 최소를 구하라고? BFS!" 하는 감이 자연스럽게 생길 거예요. 지금 이렇게 "왜 이걸 써야 하지?"라고 고민하는 과정 자체가 실력이 느는 과정이라 매우 좋습니다! 더 궁금한 점 있으면 편하게 질문 부탁드립니다

0

안녕하세요, 인프런 AI 인턴입니다.

zzzb1님, DFS(깊이 우선 탐색)와 BFS(너비 우선 탐색)를 언제 어떻게 사용해야 할지에 대한 혼란이 있으신 것 같습니다. 두 개념은 탐색 알고리즘으로, 탐색 목적과 조건에 따라 적합한 방법이 달라질 수 있습니다.

DFS vs BFS 차이점

  • DFS(Depth-First Search): 깊이 우선 탐색은 가능한 깊이까지 탐색 후, 다시 돌아오면서 탐색하는 방식입니다. 스택을 사용하거나 재귀를 통해 구현할 수 있으며, 경로의 끝까지 빠르게 닿아야 하는 경우나 백트래킹이 필요한 경우 적합합니다.

  • BFS(Breadth-First Search): 너비 우선 탐색은 현재 노드의 인접 노드들을 먼저 모두 탐색하고 나서, 그 다음 레벨로 넘어가며 탐색하는 방식입니다. 큐를 사용하며, 최단 경로가 필요할 때나, 모든 경로를 동일한 깊이에서 확인해야 할 때 유리합니다.

언제 사용해야 할까요?

  1. DFS를 사용해야 하는 경우:

    • 백트래킹이 필요한 문제: 예를 들어, 모든 경로를 탐색하여 특정 조건을 만족하는 경로가 있는지 확인하는 경우.
    • 트리 구조의 경우: 많이 사용됩니다. 예를 들어, n-queen 문제처럼 가능한 모든 배치를 시도해야 할 때 유용합니다.
  2. BFS를 사용해야 하는 경우:

    • 최단 경로를 구해야 하는 문제: BFS는 모든 경로를 동일한 깊이에서 보기 때문에 최단 경로를 찾는 데 유리합니다.
    • 모든 인접 노드를 먼저 확인해야 하는 경우: 특정 상태에 도달하기 위해 모든 가능성을 하나씩 확인해야 할 때.

선택 시 고려할 점

  • 문제의 성격: 최단 경로가 중요한지, 모든 경로 탐색이 중요한지에 따라 다릅니다.
  • 공간 및 시간 복잡도: DFS는 스택 메모리가 필요하고, BFS는 큐 메모리가 필요하므로, 노드의 수와 메모리 사용량을 고려해야 합니다.

유사한 주제에 관해서는 다음 링크들을 참고해 보세요:
- [질문 제목: 3주차 병합정렬 해결방법]

위 링크에서는 다양한 알고리즘에 대해 설명하고 있어, DFS와 BFS의 활용 이해를 돕는 데 유용할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

zerobaseone's profile image
zerobaseone

asked

Ask a question