프로그래머스 캠핑 (C++)

안유태·2023년 6월 30일
0

알고리즘

목록 보기
101/239

프로그래머스 캠핑 Level3

2017 카카오코드 예선 문제이다. 이 문제를 풀 때는 문제를 이해하는데 시간이 오래 걸렸다. 주어지는 두 좌표가 텐트의 대각선에 해당한다는 점을 잘 이해해야한다. 먼저 x 좌표를 기준으로 정렬을 한 후, 반복문을 돌면서 하나씩 비교를 해가며 카운트를 세는 브루트포스 방식으로 문제를 해결하였다. 눈 여겨볼 점은 만약 두 좌표가 x나 y 중에 같은 위치에 있을 경우 넓이는 0이 되므로 continue해주는 부분이다. 확실히 카카오 문제들은 지문이 길고 이해하기가 까다로운 문제들이 많다. 급할수록 천천히. 천천히 읽고 이해하자



#include <vector>
#include <algorithm>

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 x = data[i][0];
        int y = data[i][1];
        
        for(int j=i+1;j<n;j++) {
            int nx = data[j][0];
            int ny = data[j][1];
            
            if(x==nx || y==ny) {
                continue;
            }
            
            int maxY = y > ny ? y : ny;
            int minY = y > ny ? ny : y;
            
            bool tf = true;
            for(int k=i+1;k<j;k++) {
                int tx = data[k][0];
                int ty = data[k][1];
                
                if(tx>x && tx<nx && ty>minY && ty<maxY) {
                    tf = false;
                    break;
                }
            }
            
            if(tf) {
                answer++;
            }
        }
    }
    
    return answer;
}
profile
공부하는 개발자

0개의 댓글