프로그래머스 Lv2 카카오프렌즈 컬러링 북 Java

Android Chen·2021년 11월 1일
0

문제설명

https://programmers.co.kr/learn/courses/30/lessons/1829

구현방법

  • 문제는 단순 bfs또는 dfs를 사용해서 최대 영역크기 저장, dfs또는 bfs를 새로 실행할 때 마다 cnt를 증가시켜 구현해주면 될 것이라 생각해 빠르게 구현하였다

  • 하지만 테케는 통과하는데 제출 시 계속 실패가 떴다. 찾아보니 picture를 직접 건들지 말고 2차원 long 배열에 옮겨서 사용하고 전역변수 초기화 시 solution 함수 내에서 진행하라고 하더라. 이렇게 바꾸니까 통과했다.

코드

import java.util.*;
class Solution {
    static int mX[] = {1,0,-1,0};
    static int mY[] = {0,1,0,-1};
    static long board[][];
    static int cnt;
    static int size;
    static int max_size;
    static boolean visit[][];
    public int[] solution(int m, int n, int[][] picture) {
        board = new long[m][n];
        max_size = Integer.MIN_VALUE;
         for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                board[i][j] = picture[i][j];
            }
         }
        cnt = 0;
        size = 0;
        visit = new boolean[m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(!visit[i][j]&&board[i][j]!=0){
                    size=0;
                    cnt++;
                    dfs(i,j,picture[i][j]);
                    max_size = Math.max(size,max_size);
                }
            }
        }
        int[] answer = new int[2];
        answer[0] = cnt;
        answer[1] = max_size;
        return answer;
    }
    static void dfs(int x, int y,int value){
        visit[x][y] = true;
        size++;
        for(int i=0;i<4;i++){
            int tX = x+mX[i];
            int tY = y+mY[i];
            if(check(tX,tY)&&!visit[tX][tY]&&board[tX][tY]==value){
                dfs(tX,tY,value);
            }
        }
    }
    static boolean check(int x, int y){
        if(x<0||x>=board.length||y<0||y>=board[0].length){
            return false;
        }
        return true;
    }
}
profile
https://github.com/Userz1-redd

0개의 댓글