카테고리 없음

[프로그래머스/Lv. 0] 안전지대

imname1am 2023. 2. 13. 15:08
반응형

어떻게 풀어야할지 생각을 해보았다....

 

위험지역인 위치의 원소를 일일이 1로 값으로 변경하고,

배열에서 값이 1인 원소의 갯수를 세서 빼고 그렇게 해서 결과를 내면 되겠다라는 생각을 해보았는데...

(또는 boolean 활용...)

 

너무 노가다 작업인 거 같고... 비효율적인 것 같아 생각만 하고 끝까지 코드를 구현하지는 않았음... (딱콩)

생각하다가 지친 코드...

그래서 다른 분들 답을 보기로 결정했다...

 

2022.12.13 / 프로그래머스 코딩테스트 입문 > 안전지대

https://school.programmers.co.kr/learn/courses/30/lessons/120866 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

tevelop.tistory.com

 

프로그래머스 Lv0) 안전지대

기본적인 행렬문제. 행렬 완전탐색

ryong9rrr.github.io

class Solution {
    public int solution(int[][] board) {
        int answer = 0;
        
        int[] dx = {-1, 0, 1, 0, -1, 1, -1, 1};
        int[] dy = {0, 1, 0, -1, -1, -1, 1, 1};
        
        int len = board.length;
        
        boolean[][] checkBoard = new boolean[len][len];
        
        for(int i=0 ; i < len ; i++) {
            for(int j=0 ; j < len ; j++) {
                
                boolean flag = true;
                
                for(int k=0 ; k < 8 ; k ++) {
                    int nx = i + dx[k];
                    int ny = j + dy[k];
                    
                    // 이미 지뢰가 설치된 곳
                    if(board[i][j] == 1) {
                        checkBoard[i][j] = true;
                    }
                    
                    // 지뢰가 설치된 곳 주변에 폭탄 설치
                    if(nx >= 0 && nx < len && ny >= 0 && ny < len && board[nx][ny] == 1) {
                        checkBoard[i][j] = true;
                    }
                }
            }
        }
        
        
        // 폭탄이 설치되지 않은 곳만 카운트
        for(int i=0 ; i < checkBoard.length ; i++) {
            for(int j=0 ; j < checkBoard.length ; j++) {
                if(!checkBoard[i][j]) {
                    answer++;
                }
            }
        }

        return answer;
    }
}

무려 3중 for문..!!!🙊

 

나는 위험지역 부분 값을 설정할 때 직접 입력해서 8개 다 해줄 생각을 했는데..

애초에 그냥 x와 y값의 증감 값을 갖고 있는 배열(dx,dy)을 저렇게 미리 선언해 놓고,

반복문 돌려서 값만 꺼내쓰면 되는 것이었다...

 

그리고 25번째 줄을 보면...

0 <= nx, ny < board.length이고 board[nx][ny] == 1일 때의 조건을 추가해줬다.

 

그리고 마지막 for문에서 2차원 boolean 배열인 checkBoard의 값이 false(0)일 때 answer++가 되도록 함...

 

악..... 풀이 올려주셔서 감사하고... 눈물 좀...

4점.. 밖에..?😥

 

반응형