본문 바로가기
알고리즘/알고리즘 설명

20230627 [Java] 문제풀이

by JayAlex07 2023. 6. 27.

20230627 [Java] 문제풀이

 

[프로그래머스] 안전지대

 

행렬이 주어진다

 

1은 지뢰가 있는 곳 그리고 0은 지뢰가 없는 곳이다

  • 지뢰 기준으로 8방면 (위, 아래, 좌, 우, 대각선) 모두 위험 지역이다

 

위험 지역이 아닌 곳의 개수를 찾으면 된다

 

1) 델타 탐색 (dr, dc) 를 통해 1을 발견하면 8방면을 2로 만들어 준다

 

2) 그렇게 위험 지역을 1과 2로 표시하고, 다시 2중 for문을 통해 안전 지역인 0을 세준다

class Solution {
    public int solution(int[][] board) {
        int answer = 0;

        int[] dr = {-1, -1, -1, 0, 0, 1, 1, 1};
        int[] dc = {-1, 0, 1, -1, 1, -1, 0, 1};

        for (int r = 0; r < board.length; r++) {
            for (int c = 0; c < board.length; c++) {
                if (board[r][c] == 1) {
                    for (int i = 0; i < 8; i++) {
                        int sr = dr[i] + r;
                        int sc = dc[i] + c;

                        if ((0 <= sr && sr < board.length) && (0 <= sc && sc < board.length)) {
                            if (board[sr][sc] == 0) {
                                board[sr][sc] = 2;
                            }
                        }
                    }
                }
            }
        }

        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board.length; j++) {
                if (board[i][j] == 0) {
                    answer += 1;
                }
            }
        }

        return answer;
    }
}

 

 

최빈값 구하기

 

배열이 주어지고, 배열 안에 정수 중에, 제일 많이 나온 정수를 출력하는 것이다

 

제일 많이 나온 정수의 개수가 1을 초과할 때에, -1을 출력한다

 

Collections.max(map.values()); 를 통해서 최대 값을 가지고 온다

  • 여기서 최대 값은, 제일 큰 개수를 뜻한다

 

그리고 map을 순회하면서, 최대 개수와 동일한 값을 가진 key를 numbers 리스트에 넣는다

 

numbers 리스트가 1을 초과하면 -1 을 출력하고, 한 개면, 그 하나의 정수만 출력해준다

import java.util.*;

class Solution {
    public int solution(int[] array) {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        int value;

        for (int num : array) {
            if (!map.containsKey(num)) {
                map.put(num, 1);
            } else {
                value = map.get(num);
                map.put(num, value + 1);
            }
        }

        int maxVal = Collections.max(map.values());

        System.out.println(maxVal);

        for (int num : map.keySet()) {
            if (map.get(num) == maxVal) {
                numbers.add(num);
            }
        }

        if (numbers.size() > 1) {
            return -1;
        } else {
            return numbers.get(0);
        }
    }
}

'알고리즘 > 알고리즘 설명' 카테고리의 다른 글

20230629 [Java] 문제풀이  (0) 2023.06.29
20230628 [Java] 문제풀이  (0) 2023.06.28
20230626 [Java] 문제풀이  (0) 2023.06.26
20230625 Java 문제풀이  (0) 2023.06.25
20230614 [Java] 문제풀이  (0) 2023.06.14