본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

[pro] 프로그래머스 level3 1833 캠핑 (Java)

[문제]

https://school.programmers.co.kr/learn/courses/30/lessons/1833?language=java 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이]

먼저 데이터를 정렬해준 후 모든 쐐기 쌍들에 대해서 텐트를 설치할 수 있는지 비교해준다.

직사각형의 넓이가 0이면 텐트를 설치할 수 없으며(같은 r이나 같은 c값을 갖는 경우), 내부에 다른 쐐기가 있다면 텐트를 설치할 수 없다.   

 

[코드]

 

import java.util.*;

class Solution {
    public int solution(int n, int[][] data) {
        int answer = 0;
        
        Arrays.sort(data, (o1, o2) -> {
             if (o1[0] == o2[0]) {
                return o1[1] - o2[1];
            }
            return o1[0] - o2[0];
        });
        
        for(int i=0; i<n; i++){
            int r = data[i][0];
            int c = data[i][1];
            
            for(int j=i+1; j<n; j++){
                int rr = data[j][0];
                int cc = data[j][1];
                
                //넓이가 0이면 패스
                if(r==rr || c==cc) continue;
                
                //내부에 다른 쐐기가 있는지
                boolean flag = true;
                for(int k=i+1; k<j; k++){
                    int kr = data[k][0];
                    int kc = data[k][1];
                    
                    if((r < kr && kr < rr) && (Math.min(c, cc) < kc && kc < Math.max(c, cc))){
                        flag = false;
                        break;
                    }
    
                }
                
                if(flag) answer++;
            }
        }
    
        return answer;
        
    }
    
}