[프로그래머스(Programmers)][Java,Python] (Lv1) 공원 (PCCE 기출문제 10번)

728x90

 

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

 

프로그래머스

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

programmers.co.kr

 

1. Java

import java.util.*;
class Solution {
    public int solution(int[] mats, String[][] park) {
        int answer = -1;
        int ph = park.length;
        int pw = park[0].length;
        int mc = mats.length;
        Arrays.sort(mats);
        for ( int px = 0; px < ph; ++px ) {
            for ( int py = 0; py < pw; ++py ) {
                if ( park[px][py].equals("-1") ) {
                    loop:
                    for ( int i = mc-1; i >= 0; --i ) {
                        int ms = mats[i];
                        int mh = px + ms -1;
                        int mw = py + ms -1;
                        if ( mh >= ph || mw >= pw ) {
                            continue;
                        }
                        for ( int mx = px; mx <= mh; ++mx ) {
                            for ( int my = py; my <= mw; ++my ) {
                                if ( !park[mx][my].equals("-1")  ) {
                                    continue loop;
                                }
                            }
                        }
                        if ( answer < ms ) {
                            answer = ms;
                            break;
                        }
                    }
                }
            }
        }
        return answer;
    }
}
import java.util.*;
class Solution {
    public int solution(int[] mats, String[][] park) {
        int answer = -1;
        int ph = park.length;
        int pw = park[0].length;
        int mc = mats.length;
        Arrays.sort(mats);
        for ( int i = mc-1; i >= 0; --i) {
            int ms = mats[i];
            outer:
            for ( int px = 0; px < ph; ++px ) {
                inner:
                for ( int py = 0; py < pw; ++py ) {
                    if ( px+ms > ph ) {
                        break outer;
                    }
                    if ( py+ms > pw ) {
                        break inner;
                    }
                    for ( int mx = px; mx < px+ms; ++mx ) {
                        for ( int my = py; my < py+ms; ++my ) {
                            if ( !park[mx][my].equals("-1") ) {
                                continue inner;
                            }
                        }
                    }
                    answer = ms;
                    return answer;
                }
            }
        }
        return answer;
    }
}

 

2. Python

def solution(mats, park):
    answer = -1
    ph = len(park)
    pw = len(park[0])
    mc = len(mats)
    mats.sort(reverse=True)
    for ms in mats :
        for px in range(ph) :
            for py in range(pw) :
                if px+ms > ph or py+ms > pw :
                    break
                for mx in range(ms) :
                    for my in range(ms) :
                        if park[mx+px][my+py] != "-1" :
                            break
                    else :
                        continue
                    break
                else :
                    answer = ms
                    return answer
    return answer

 

반응형