728x90
반응형
SMALL

문제 설명

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.

지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.


제한사항

  • board는 n * n 배열입니다.
  • 1 ≤ n ≤ 100
  • 지뢰는 1로 표시되어 있습니다.
  • board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.

입출력 예

board result

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] 16
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] 13
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] 0

입출력 예 설명

입출력 예 #1

  • (3, 2)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선 총 8칸은 위험지역입니다. 따라서 16을 return합니다.

입출력 예 #2

  • (3, 2), (3, 3)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선은 위험지역입니다. 따라서 위험지역을 제외한 칸 수 13을 return합니다.

입출력 예 #3

  • 모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0을 return합니다.
package Lv0;
/*
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
 */
public class H120866 {
	public int solution(int[][] board) {
		int answer = board.length;
		int safeAreaCount = 0;

		for (int i = 0; i < answer; i++) {
			for (int j = 0; j < answer; j++) {
				if (board[i][j] == 0) {
					boolean isSafe = true;

					for (int dx = -1; dx <= 1; dx++) {
						for (int dy = -1; dy <= 1; dy++) {
							int newRow = i + dx;
							int newCol = j + dy;

							if (newRow >= 0 && newRow < answer && newCol >= 0 && newCol < answer) {
								if (board[newRow][newCol] == 1) {
									isSafe = false;
									break;
								}
							}
						}
						if (!isSafe) {
							break;
						}
					}

					if (isSafe) {
						safeAreaCount++;
					}
				}
			}
		}

		return safeAreaCount;
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

치킨쿠폰  (0) 2023.05.09
그림 확대  (0) 2023.05.09
배열의 길이를 2의 거듭제곱으로 만들기  (0) 2023.05.08
특이한 정렬  (0) 2023.05.08
qr code  (0) 2023.05.08
728x90
반응형
SMALL

문제 설명

정수 배열 arr이 매개변수로 주어집니다. arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다. arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ arr의 길이 ≤ 1,000
  • 1 ≤ arr의 원소 ≤ 1,000

입출력 예

arr result

[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 0, 0]
[58, 172, 746, 89] [58, 172, 746, 89]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 arr의 길이는 6입니다. arr의 길이를 2의 정수 거듭제곱으로 만드는 방법은 0을 2개, 10개, 26개,..., 추가하는 방법이 있고 그중 최소한으로 0을 추가하는 방법은 2개를 추가하는 것입니다. 따라서 [1, 2, 3, 4, 5, 6, 0, 0]을 return 합니다.

입출력 예 #2

  • 예제 2번의 arr의 길이는 4이고 이미 2의 정수 거듭제곱입니다. 따라서 뒤에 0을 추가하지 않아도 되므로 [58, 172, 746, 89]를 return 합니다.
package Lv0;
/*
정수 배열 arr이 매개변수로 주어집니다.
arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다.
arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.
 */
public class H181857 {
	public int[] solution(int[] arr) {
		int n = arr.length;
		int targetLength = 1;

		while (targetLength < n) {
			targetLength *= 2;
		}

		if (targetLength == n) {
			return arr;
		} else {
			int[] answer = new int[targetLength];
			System.arraycopy(arr, 0, answer, 0, n);
			for (int i = n; i < targetLength; i++) {
				answer[i] = 0;
			}
			return answer;
		}
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

그림 확대  (0) 2023.05.09
안전지대  (0) 2023.05.08
특이한 정렬  (0) 2023.05.08
qr code  (0) 2023.05.08
문자열 겹쳐쓰기  (0) 2023.05.08
728x90
반응형
SMALL

문제 설명

정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n ≤ 10,000
  • 1 ≤ numlist의 원소 ≤ 10,000
  • 1 ≤ numlist의 길이 ≤ 100
  • numlist는 중복된 원소를 갖지 않습니다.

입출력 예

numlist n result

[1, 2, 3, 4, 5, 6] 4 [4, 5, 3, 6, 2, 1]
[10000,20,36,47,40,6,10,7000] 30 [36, 40, 20, 47, 10, 6, 7000, 10000]

입출력 예 설명

입출력 예 #1

  • 4에서 가까운 순으로 [4, 5, 3, 6, 2, 1]을 return합니다.
  • 3과 5는 거리가 같으므로 더 큰 5가 앞에 와야 합니다.
  • 2와 6은 거리가 같으므로 더 큰 6이 앞에 와야 합니다.

입출력 예 #2

  • 30에서 가까운 순으로 [36, 40, 20, 47, 10, 6, 7000, 10000]을 return합니다.
  • 20과 40은 거리가 같으므로 더 큰 40이 앞에 와야 합니다.
package Lv0;

import java.util.Arrays;
import java.util.Comparator;

/*
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다.
정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
 */
public class H120880 {
	public int[] solution(int[] numlist, int n) {
		// 거리를 계한하는 함수 정의
		Comparator<Integer> distanceComparator = (num1, num2) -> {
			int dist1 = Math.abs(num1 - n);
			int dist2 = Math.abs(num2 - n);

			if (dist1 == dist2) {
				return num2 - num1;
			} else {
				return dist1 - dist2;
			}
		};

		// int[] numlist를 Integer[]로 변환
		Integer[] numlistInteger = Arrays.stream(numlist).boxed().toArray(Integer[]::new);

		// numlistInteger를 distanceComparator를 기준으로 정렬
		Arrays.sort(numlistInteger, distanceComparator);

		// Integer[] numlistInteger를 int[]로 변환하고 반환
		return Arrays.stream(numlistInteger).mapToInt(Integer::intValue).toArray();
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

안전지대  (0) 2023.05.08
배열의 길이를 2의 거듭제곱으로 만들기  (0) 2023.05.08
qr code  (0) 2023.05.08
문자열 겹쳐쓰기  (0) 2023.05.08
로그인 성공?  (0) 2023.05.08

+ Recent posts