프로그래머스 (기능 개발)
import java.util.ArrayList;
import java.util.List;
public class problem438 {
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] work = new int[progresses.length];
for (int i = 0; i < progresses.length; i++) {
work[i] = (100 - progresses[i]) / speeds[i]; // 걸리는 시간
if ((100 - progresses[i]) % speeds[i] != 0) {
// speeds에 비해 남아있는 % 가 있을경우 하루를 더 계산한다.
work[i] += 1;
}
}
// 7 7 9
List<Integer> list = new ArrayList<>();
int count = 1;
int compare = work[0];
for (int i = 1; i < progresses.length; i++) {
// 앞의 기능이 끝나기 전까지는 다음 기능을 완료할수없다.
if (compare >= work[i]) {
count++;
} else {
list.add(count);
count = 1; // 초기화
compare = work[i];
}
}
list.add(count);
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
}
프로그래머스 (안전지대)
public class problem439 {
class Solution {
public int solution(int[][] board) {
int length = board.length;
int count = 0;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
if (board[i][j] == 1) continue; // 지뢰가 매설된 경우
// 안전한 지역인 경우
boolean isSafe = true;
// 총 9개의 칸 위 아래 좌 우 대각선 검사
for (int mx = -1; mx <= 1; mx++) {
for (int my = -1; my <= 1; my++) {
int dx = i + mx; // x 축 이동
int dy = j + my; // y 축 이동
// 범위를 벗어난 경우
if (dx < 0 || dx >= length ||
dy < 0 || dy >= length) {
continue;
}
// 인접한 칸에서 지뢰를 발견한 경우
if (board[dx][dy] == 1) {
isSafe = false;
break; // 이미 위험 지역임으로 break; 중복 방지
}
}
}
if (isSafe) count++;
}
}
return count;
}
}
}