매일 Algorithm

신재원·2023년 5월 26일
1

Algorithm

목록 보기
131/243

프로그래머스 (기능 개발)

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;
        }
    }
}

0개의 댓글