코딩테스트/C++

[프로그래머스 Level 3] 캠핑 (C++)

최-코드 2025. 1. 28. 22:14

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

 

프로그래머스

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

programmers.co.kr

 

1. x축과 y축을 기준으로 정렬 진행

2. 순서에 따라 2개의 좌표 추출(1-2-3-4와 같이 있을 때 1-2, 1-3, 1-4, 2-3, 2-4, 3-4)

3. 그 사이에 있는 좌표가 직사각형 내부에 있는지 검증

시간 초과가 날 거라 생각해서 안 했었다. 근데 다른 풀이가 안 떠올라서 인터넷을 뒤져봤는데 내가 생각한 풀이랑 똑같길래 실행해보았고, 통과가 되었다. 시간 초과 부분이 널널한 거 같다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int solution(int n, vector<vector<int>> data) {
    int answer = 0;
    
    sort(data.begin(), data.end());
    
    for(int i = 0; i<n; i++){
        int a = data[i][0];
        int b = data[i][1];
        
        for(int j = i+1; j<n; j++){
            int x = data[j][0];
            int y = data[j][1];
            
            if(a == x || b == y) continue;
            
            bool isInner = false;
            
            for(int k = i+1; k<n; k++){
                int p = data[k][0];
                int q = data[k][1];
                
                if(p>a && p<x && q>min(b,y) && q<max(b,y)){
                    isInner = true;
                    break;
                }
            }
            if(isInner)
                continue;
            
            answer++;
        }
    }
    return answer;
}