inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

38군데 합격 비법, 2026 코딩테스트 필수 알고리즘

4-9. 4주차 끝 & 숙제 설명

큐에 항상 하나의 값만 들어가는데 문제풀이에 bfs를 떠올리신 이유가 궁금합니다.

해결된 질문

103

정중한 몽구스

작성한 질문수 9

0

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

답변 2

0

딩코딩코

안녕하세요 몽구스님 좋은 질문 감사합니다!!

맞습니다! 이 로봇 청소기 문제는 일반적인 BFS와 다릅니다. 로봇이 청소할 곳을 찾는 즉시 바로 그 곳으로 이동하기 때문에, 큐에는 항상 현재 위치 하나만 존재하게 됩니다.

일반적인 BFS라면 미로 탈출 같은 문제에서 queue = [(1,1), (1,2), (2,1)] 처럼 여러 위치를 동시에 탐색하지만, 청소기 문제에서는 queue = [(7,4,0)] 처럼 로봇의 현재 위치와 방향 하나만 있죠.

그럼에도 굳이 큐를 사용한 이유는 구조적 일관성 때문입니다. BFS 패턴을 유지해서 코드를 이해하기 쉽게 만들었습니다. "탐색 문제구나!"라고 바로 알 수 있거든요. 그리고 while문으로 계속 진행하다가 더 이상 갈 곳이 없으면 자연스럽게 종료됩니다.

물론 이 문제는 재귀나 단순 while문으로도 구현할 수 있습니다

def clean_with_recursion(r, c, d, room_map):
    room_map[r][c] = 2
    count = 1
    
    while True:
        temp_d = d
        can_move = False
        
        for i in range(4):
            temp_d = (temp_d + 3) % 4  # 왼쪽 회전
            new_r, new_c = r + dr[temp_d], c + dc[temp_d]
            
            if room_map[new_r][new_c] == 0:  # 청소할 곳 발견
                r, c, d = new_r, new_c, temp_d
                room_map[r][c] = 2
                count += 1
                can_move = True
                break
        
        if not can_move:  # 4방향 모두 막힘
            back_d = (d + 2) % 4
            back_r, back_c = r + dr[back_d], c + dc[back_d]
            
            if room_map[back_r][back_c] == 1:  # 뒤도 벽
                break
            else:
                r, c = back_r, back_c  # 후진
    
    return count

시뮬레이션 문제라면 단순 while문이 더 직관적일 수 있어요. 하지만 BFS 패턴을 사용하면 코드 리뷰할 때 "아, 탐색 문제구나" 바로 인식 가능하고, 나중에 문제가 변경되어도 확장하기 쉽고, 면접에서도 "BFS로 접근했다"고 명확하게 설명할 수 있어서 이와 같이 구현했습니다

넘넘 좋은 질문 감사합니다!이런 식으로 "왜 이렇게 구현했을까?"를 계속 생각하시면 알고리즘 실력이 훨씬 빨리 느실 것 같습니다 언제든 편하게 질문 해주세요 좋은 하루 되시길 바랍니다

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 정중한 몽구스님.

질문해주신 내용은 BFS(Breadth-First Search)에 관한 것입니다. BFS에서는 큐(queue)를 사용하는 것이 기본 원칙입니다. 이때, 큐에 들어가는 값이 항상 하나밖에 존재하지 않는데 왜 큐를 사용해야 하는지 궁금하셨군요.

BFS와 큐 사용의 이유

  1. BFS의 본질적인 특성:

    • BFS는 너비 우선 탐색으로, 그래프나 트리 구조에서 모든 이웃 노드를 처음부터 끝까지 탐색해 나가는 방식입니다. 이를 위해 모든 탐색 노드를 체계적으로 관리하기 위한 자료구조가 큐입니다. 큐는 FIFO(First In First Out) 구조이기에 BFS 구현에 적합합니다.
  2. 큐의 사용 패턴:

    • 문제 상황에 따라 어떤 경우에는 큐에 동시에 여러 값이 들어갈 수 있고, 어떤 상황에서는 하나만 남아 있을 수도 있습니다.
    • BFS 자체가 처음부터 끝까지 해당 레벨의 모든 노드를 확장(search)을 완료하고 나서 그다음 레벨로 넘어갈 때마다 탐색 범위를 확장해 나가는 방식이기 때문입니다.
  3. 문제 풀이:

    • 문제에 따라 다르겠으나, 청소기 문제처럼 특정 조건 아래서만 큐에 하나의 값이 남아 있을 수도 있습니다. 하지만 BFS의 본질적인 탐색 메커니즘을 유지하기 위해 큐 자료구조는 여전히 적합합니다.
    • 따라서, 현재 적용된 알고리즘이 문제의 최적 해를 찾기에 적절한지 고려해야 합니다.

질문해주신 청소기 문제에서도 BFS는 강력한 탐색 알고리즘으로, 다양한 조건이나 상황에 맞춰서 노드를 탐색할 때 적합합니다. 때로는 여러 노드가 큐에 들어갈 수도, 하나의 값만 존재할 수도 있지만 이러한 구조를 통해서 문제를 체계적으로 풀어나갈 수 있습니다.

관련해서 다른 학습자분들의 문제 풀이 및 BFS 사용 사례를 보고 싶으시면 다음 유사한 질문을 참고해 보세요:

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

수강평 이벤트

0

33

2

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

66

2

3-3 정렬-2 선택정렬 로직

0

42

2

링크드 리스트 끝에서 k번째 값 출력하기

0

45

2

LinkedList 과제 Fast, slow 포인터

0

50

2

투포인터 시간복잡도

0

52

2

수강평 작성 후 자료

0

53

2

수업교재 링크 오류

2

114

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

130

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

74

2

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

0

85

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

91

2

수업자료 pdf 받고싶습니다

0

106

2

강의 자료 오류 수정

0

75

1

2-10 더하거나 빼거나 관련 질문입니다

0

63

2

3-8 해쉬 -2

0

49

2

Linked List Element Delete Explanation Problem

0

68

2

강의3-4 스택 탑 문제

0

74

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

99

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

75

2

1874 - 스택 문항

0

81

2

DP Java 예제 자료형 오버플로우 문제

0

100

2

4-9 4주차 숙제중 농심라면 문제

0

111

2

DFS 에서 스택을 사용하는 이유

1

187

3