계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

  • 홈
  • Who Am I(CV)
  • 태그

공지사항

인기 글

태그

  • LM
  • networkflow
  • 머신러닝
  • DigitalImageProcessing
  • 선형회귀
  • 비지도학습
  • 손실함수
  • NLP
  • MaximumFlow
  • 컴퓨터비전
  • machinelearning
  • f1-score
  • 네트워크플로우
  • 에지검출
  • 군집화
  • 파이썬 클린코드
  • ML
  • 기계학습
  • 경사하강법
  • 비용함수
  • DIP
  • ComputerVision
  • 알고리즘
  • 디지털이미지처리
  • 결정경계
  • 최대유량
  • 패턴인식
  • SIFT
  • 지도학습
  • 언어모델

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

[C++] BOJ 7576. 토마토
Algorithm/백준 문제풀이

[C++] BOJ 7576. 토마토

2020. 9. 16. 10:52
반응형

www.acmicpc.net/problem/7576

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토�

www.acmicpc.net

 

문제 설명

: 예제가 아래와 같이 들어온다면 아래의 토마토 일 수 변화과정으로 6일이 결과값으로 도출됨을 확인할 수 있다

 

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>

using namespace std;

int dy[4] = {0,0,1,-1};
int dx[4] = {1,-1,0,0,};
int n,m;
int box[1000][1000];
queue<pair<int,int>> start_point;
int tmp, bfs_tmp;
int day;
bool already_ripe;

void bfs(int row, int column);
bool check_unripe_tomato();

int main(void){
    pair<int,int> now;
    bool already_ripe = true;
    cin >> m >> n;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            scanf("%d", &box[i][j]);
            if( box[i][j] == 1 )
                start_point.push(make_pair(i, j));
            if( already_ripe && box[i][j] == 0)
                already_ripe = false;
        }
    }
    if( already_ripe ){
        cout << 0 << '\n';
        return 0;
    }
    tmp = start_point.size();
    while( !start_point.empty() ){
        now.first = start_point.front().first;
        now.second = start_point.front().second;
        start_point.pop();
        bfs(now.first, now.second);
        bfs_tmp++;
        if( bfs_tmp == tmp ){
            day++;
            bfs_tmp = 0;
            tmp = start_point.size();
        }
    }
    if( !check_unripe_tomato() )
        cout << day-1 << '\n';
    else
        cout << -1 << '\n';
    
}
void bfs(int r, int c){
    
    int nx, ny;
    for(int i = 0; i < 4; i++){
        ny = r + dy[i];
        nx = c + dx[i];
        if( ny < 0 || ny >= n || nx < 0 || nx >= m)
            continue;
        if( box[ny][nx] == 0 ){
            box[ny][nx] = 1;
            start_point.push(make_pair(ny, nx));
        }
    }
}
bool check_unripe_tomato(){
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            if( box[i][j] == 0 )
                return true;
    return false;
}
반응형

'Algorithm > 백준 문제풀이' 카테고리의 다른 글

[Python] BOJ 9663. N-Queen  (1) 2022.03.20
[Python] BOJ 1300. k번째 수  (0) 2021.01.31
[C++] BOJ 1051. 숫자 정사각형  (0) 2020.09.30
[C++] BOJ 4386. 별자리 만들기  (0) 2020.09.23
[Kotlin] BOJ 7785. 회사에 있는 사람  (0) 2020.01.07
    'Algorithm/백준 문제풀이' 카테고리의 다른 글
    • [Python] BOJ 1300. k번째 수
    • [C++] BOJ 1051. 숫자 정사각형
    • [C++] BOJ 4386. 별자리 만들기
    • [Kotlin] BOJ 7785. 회사에 있는 사람
    계속지나가기
    계속지나가기
    NLP Engineer

    티스토리툴바