D.S.
Übermensch : To a Brighter Future
D.S.
전체 방문자
오늘
어제
  • 분류 전체보기 (109)
    • Lecture Notes (1)
      • CS231n (1)
    • Thoughts on Videos (ToV) (7)
    • Tech (0)
    • 개인 기록 (0)
      • 프로그래밍공부일지 (0)
      • CS Study 한눈에 보기 (0)
    • 프로그래밍 (65)
      • C (35)
      • C++ (0)
      • Python (12)
      • 이코테python (8)
      • 2022군장병AI_SW_Elice (4)
      • 2022군장병AI_SW_Kakao (1)
      • Solidity (2)
      • Web (3)
    • Mental Augmentation (28)
      • Kwik Reading (22)
      • 독서 (0)
      • 갸꿀팁 (2)
      • 3-Part Memory Training (1)
      • Kwik Recall (3)
    • Physical Augmentation (3)
      • Health Journal (2)
      • Sinclair Podcast (1)
    • Others (0)
      • 여행 (0)
    • Idea Bank (0)
      • VBA (0)
      • PLANS (0)
    • 22-2학기 수업 (0)
      • 데이터베이스시스템 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

글쓰기

Kwik Reading

공지사항

인기 글

태그

  • 속독
  • 노화의 종말
  • Jim Kwik
  • brain break
  • 짐 퀵
  • 뇌 요가
  • Eye Fixation
  • 비문학독해
  • 독서
  • Kwik Brain
  • 우뇌
  • Kwik Reading
  • baekjoon
  • brain yoga
  • 번역
  • 기술독서
  • 디지털 방해
  • 속독 훈련
  • 백준
  • lifespan
  • 속발음
  • elice
  • 습관
  • 군장병
  • Dandapani
  • 학습
  • ai/sw
  • Infinity Technique
  • subvocalization
  • kwik recall

최근 댓글

hELLO · Designed By 정상우.
D.S.

Übermensch : To a Brighter Future

프로그래밍/C

baekjoon 7576 토마토 w/bfs using Queue

2022. 2. 7. 00:00

근래에 푼 문제 중에서 가장 깔끔하게 풀고 가독성도 좋은거 같아 뿌듯함.

 

#include<stdio.h>
//bfs using Queue

int main(){
    int M,N;
    scanf("%d %d", &N, &M);
    int arr[M][N];
    int queue[M*N][2];
    int front=0, rear=-1;
    int total=0;
    int tim=0;
    int f=0,r=-1;
    for(int i=0;i<M;i++){
        for(int j=0;j<N;j++){
            scanf("%d", &arr[i][j]);
            if(arr[i][j]==1){
                queue[++rear][0] = i;
                queue[rear][1] = j;
                total++;
            }
            else if(arr[i][j]==0)
                total++;
        }
    }
    while(rear>r && rear<total-1){//rear에 변화가 없을 경우 or rear가 total-1 일 경우
        f = front;//본래의 front와 rear값 저장
        r = rear;
        for(int i=f;i<=r;i++){
            arr[queue[i][0]][queue[i][1]] = 1;
            if(queue[i][0]>0){//위
                if(arr[queue[i][0]-1][queue[i][1]]==0){//0일 경우에 queue의 rear에 넣어줌
                    arr[queue[i][0]-1][queue[i][1]] = 2;//2로 중복 방지
                    queue[++rear][0] = queue[i][0]-1;//y-1
                    queue[rear][1] = queue[i][1];//x
                }
            }
            if(queue[i][0]<M-1){//아래
                if(arr[queue[i][0]+1][queue[i][1]]==0){//0일 경우에 queue의 rear에 넣어줌
                    arr[queue[i][0]+1][queue[i][1]] = 2;//2로 중복 방지
                    queue[++rear][0] = queue[i][0]+1;//y+1
                    queue[rear][1] = queue[i][1];//x
                }
            }
            if(queue[i][1]>0){//왼쪽
                if(arr[queue[i][0]][queue[i][1]-1]==0){//0일 경우에 queue의 rear에 넣어줌
                    arr[queue[i][0]][queue[i][1]-1] = 2;//2로 중복 방지
                    queue[++rear][0] = queue[i][0];//y
                    queue[rear][1] = queue[i][1]-1;//x-1
                }
            }
            if(queue[i][1]<N-1){//오른쪽
                if(arr[queue[i][0]][queue[i][1]+1]==0){//0일 경우에 queue의 rear에 넣어줌
                    arr[queue[i][0]][queue[i][1]+1] = 2;//2로 중복 방지
                    queue[++rear][0] = queue[i][0];//y
                    queue[rear][1] = queue[i][1]+1;//x+1
                }
            }
            
        }
        /*printf("\n"); //// code for visualization
        for(int i=0;i<M;i++){
            for(int j=0;j<N;j++){
                printf("%d ", arr[i][j]);
            }
            printf("\n");
        }
        printf("\n");
        printf("rear: %d, r: %d, front: %d, f: %d, total: %d \n\n", rear, r,front,f, total);
        */
        front = r+1;
        tim++;
        
        
    }
    if(rear==total-1)//모두 익었을 경우
        printf("%d", tim);
    else//모두 익지 못한 경우
        printf("-1");
    
    return 0;
}

BFS를 이용한 첫 문제!

배열과 변수 front, rear를 이용하여 큐를 구현하였고, 이러한 큐를 이용해 bfs(breadth first search)를 구현하여

이 문제를 풀었다.

동적할당(malloc&free)를 이용하면 memory를 더 줄일수 있지만, time complexity가 높아질것이다.

'프로그래밍 > C' 카테고리의 다른 글

baekjoon 1463 1로만들기 w/ dfs & branch trimming + dp방식  (0) 2022.02.08
baekjoon 1074 Z w/4분면 Search  (0) 2022.02.08
baekjoon 1012 유기농배추 w/ dfs  (0) 2022.02.06
baekjoon 18111 마인크래프트  (0) 2022.02.06
baekjoon 11651 좌표정렬하기2 w/structure array & mergeSort  (0) 2022.02.02
    '프로그래밍/C' 카테고리의 다른 글
    • baekjoon 1463 1로만들기 w/ dfs & branch trimming + dp방식
    • baekjoon 1074 Z w/4분면 Search
    • baekjoon 1012 유기농배추 w/ dfs
    • baekjoon 18111 마인크래프트
    D.S.
    D.S.

    티스토리툴바