[백준] 1736번 쓰레기 치우기 (C++)

2025. 12. 29. 20:07·Algorithm
728x90

https://www.acmicpc.net/problem/1736

 

 

이 문제는 N X M 격자가 주어지고 격자에는 0과 1의 요소만 주어지며 1은 쓰레기를 나타내고 0은 빈 곳을 나타낸다.

이때 모든 칸에 로봇 청소기를 놓을 수 있으며 로봇 청소기는 해당 칸을 기준으로 오른쪽과 아래로만 이동할 수 있다.

 

이때 모든 칸의 쓰레기가 없게 하는 최소 로봇 개수를 구하는 문제이다.

 

처음엔 재귀를 사용하여 완전탐색하는 경우를 생각하였다. 하지만 문제 접근을 잘못하였고 쓰레기를 발견했을때 오른쪽과 아래쪽을 재귀호출하여 잘못된 로직으로 작성하였다.

 

하지만 실제로는 현재 칸에서 오른쪽 또는 아래 칸으로 갈 수 있기 때문에 갈 수 있는 칸만 탐색을 하여 쓰레기를 만날때마다 재귀호출을 하고 바로 끝나면 리턴하여 종료할 수 있게 작성하였다.

 

정답코드

 

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
#define endl "\n"

const int INF = 1e9;
// int dx[] = {0, 0, 1, -1};
// int dy[] = {1, -1, 0, 0};
int dx[] = {1, 0};
int dy[] = {0, 1};
int N, M, trash, answer;
int graph[101][101];

void func(int x, int y) {
    for(int i = x; i < N; i++) {		// x,y를 고정했기 때문에 현재 칸 기준으로 아래 오른쪽 탐색
        for(int j = y; j < M; j++) {
            if(graph[i][j]) {
                trash--;			// 쓰레기 개수 차감
                graph[i][j] = 0;	// 현재 칸을 빈칸으로 채움
                func(i, j);
                return;		
            }
        }
    }
}

void solve() {
    while(trash > 0) {
        func(0, 0);
        answer++;
    }

    cout << answer;
}

void input() {
    cin >> N >> M;

    for(int i = 0; i < N; i++) {
        for(int j = 0; j < M; j++) {
            cin >> graph[i][j];

            if(graph[i][j] == 1) {
                trash++;
            }
        }
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    input();
    solve();
}

 

 

728x90
저작자표시 (새창열림)

'Algorithm' 카테고리의 다른 글

[백준] 12908번 텔레포트 3 (C++)  (0) 2025.12.31
[백준] 2461번 대표 선수 (C++)  (0) 2025.12.30
[백준] 1202번 보석 도둑 (C++)  (0) 2025.12.28
[백준] 20366번 같이 눈사람 만들래? (C++)  (1) 2025.12.27
[백준] 14722번 우유 도시 (C++)  (0) 2025.12.26
'Algorithm' 카테고리의 다른 글
  • [백준] 12908번 텔레포트 3 (C++)
  • [백준] 2461번 대표 선수 (C++)
  • [백준] 1202번 보석 도둑 (C++)
  • [백준] 20366번 같이 눈사람 만들래? (C++)
쿨쿨.
쿨쿨.
  • 쿨쿨.
    All of the life
    쿨쿨.
  • 전체
    오늘
    어제
    • 분류 전체보기 (278)
      • Programming (47)
        • C, C++ (18)
        • Python (6)
        • Java (1)
        • HTML,CSS,JS (3)
        • SQL(DB) (13)
        • SpringBoot (3)
        • Android (2)
        • CI,CD (1)
      • Algorithm (173)
        • Review (4)
      • Security (14)
        • WebHacking (3)
        • Websecurity (11)
      • OS (19)
        • Linux (12)
        • Mac os (2)
      • 머신러닝 (1)
      • CS(Computer Science) (12)
        • 컴퓨터 네트워크 (3)
        • 컴퓨터 구조 (1)
        • 인공지능 (8)
      • Docker (1)
      • Dev Book Review (3)
        • Clean Code (1)
        • Effective Java (0)
        • Real MySQL (2)
      • SWM (1)
      • Review (5)
      • AWS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    WebSecurity
    백트래킹
    DP
    백준
    트리
    깊이우선탐색
    우선순위 큐
    비트마스킹
    다이나믹 프로그래밍
    c언어
    브루트포스
    linux
    wargame
    다익스트라
    투포인터
    정렬
    에라토스테네스의 체
    누적합
    Leviathan
    우선순위큐
    BFS
    코딩
    그래프 이론
    그리디
    Bandit
    재귀
    시뮬레이션
    이분탐색
    구현
    DFS
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.6
쿨쿨.
[백준] 1736번 쓰레기 치우기 (C++)
상단으로

티스토리툴바