[프로그래머스] [PCCE 기출문제] 10번 / 공원(Java), (feat.90점)

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/340198

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

확인 내용

1. 돗자리의 크기들 확인 후 조건에 부합하는 가장 큰 값을 반환해야 함

2. for문이 많은 것은 런타임 에러에 주의

3. 돗자리는 정사각형이기 때문에 확인하는 값의 범위


 

코드 로직

1. 지민이가 가지고 있는 돗자리들의 크기들을 정렬하여 내림차순으로 만들어줍니다.

2. park에서 돗자리를 깔 수 있는 곳을 찾습니다.

3. 런타임 에러가 발생되지 않도록 예외 처리해줍니다.

 

 

 

최종 코드

import java.util.*;

class Solution {
    public int solution(int[] mats, String[][] park) {
        int answer = 0;
        
        // 가장 큰 돗자리부터 찾아야 함
        Integer[] matsArr = Arrays.stream(mats).boxed().toArray(Integer[]::new);
        Arrays.sort(matsArr, Collections.reverseOrder());
        
        
        // 돗자리 전체 확인
        for (int m : matsArr){
            // park의 너비
            for (int i = 0; i <= park.length - m; i++){
                for (int j = 0; j <= park[0].length - m; j++){
                    // 돗자리를 필 수 있다면 true, 중간에 하나라도 있으면 false
                    boolean check = true;
                        
                    // park의 너비를 넘지 않고 빈자리라면
                    if(park[i][j].equals("-1") && (i + m) <= park.length && (j + m) <= park[0].length){
                        
                        // 해당 자리부터 돗자리의 길이 만큼 정사각형의 길이 만큼을 확인
                        for (int k = 0; k < m; k++){ // 가로
                            for (int e = 0; e < m; e++){ // 세로
                                if(!park[k + i][e + j].equals("-1")){
                                    check=false;
                                    break;
                                }
                            }
                            if(!check) break;
                        }
                        if(check) {
                            return m;
                        }
                    }
                }
            }
        }
        return answer;
    }
    
}

 

 

마무리

Javascript에서는 쉽게 정렬할 수 있었는데 자바로 하면서 int는 정렬할 수 없다는 것을 알게됐습니다. Interger만 된다는 것을,,,

그리고 출력할 때도 자꾸 변수값만 출력하다보니까 계속 주솟값만 찍힙니다. for문으로 돌려줘야하는데 자꾸 에러가 났습니다

가장 어려웠던 게 제가 생각했던 예외처리는 다 했다고 생각했는 데 뭔가 자꾸 생각나고 또 고쳐보면 다른 예외가 발생했습니다. 예외처리를 꼼꼼하게 하는 습관을 들여야 할 것 같습니다.

체점해보면 계속 몇개가 틀립니다. 어디를 고쳐야할 까요.. 90점네요.. 피드백 부탁드립니다

728x90