Game Develop

[Algorithm] Programmers :: 캠핑 본문

Algorithm/Programmers

[Algorithm] Programmers :: 캠핑

MaxLevel 2023. 4. 22. 00:41

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

 

프로그래머스

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

programmers.co.kr

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
bool cmp(const vector<int>& a, const vector<int>& b)
{
    if (a[0== b[0])
    {
        return a[1< b[1];
    }
 
    return a[0< b[0];
}
 
int solution(int n, vector<vector<int>> data) 
{
    int answer = 0;
 
    sort(data.begin(), data.end(), cmp);
 
    for (int i = 0; i < n; ++i)
    {
        int sy = data[i][0];
        int sx = data[i][1];
 
        for (int j = i + 1; j < n; ++j)
        {
            int ny = data[j][0];
            int nx = data[j][1];
            bool isCheck = false;
 
            if (sy == ny || sx == nx) continue// 같은 행,열이면 넘기기. 한직선이라 넓이 0
 
            for (int k = i + 1; k < j; ++k) // 사이에 다른 점있는지 체크.
            {
                int cy = data[k][0];
                int cx = data[k][1];
                int maxX = max(sx, nx);
                int minX = min(sx, nx);
 
                if ((cy > sy && cy < ny) &&
                    (cx > minX && cx < maxX)
                    )
                {
                    isCheck = true;
                    break;
                }
            }
 
            if (!isCheck) ++answer;
        }
    }
 
    return answer;
}
cs

 

뭔가 백트래킹으로 풀 수 있지 않을까? 해서 몇시간동안 볼펜으로 애꿎은 노트만 괴롭혔던 문제

3레벨짜리라 그래도 위의 코드처럼 풀면 당연히 시간초과에 걸릴 줄 알고, 그냥 처음부터 배제했었다.

근데 뭔가 그럴듯한 백트래킹 풀이가 나오는 듯 하면서도, 예외상황이 하나씩 나와서 결국 포기했다.

그래서 그냥 완전탐색처럼 코드 짜고 제출했더니 통과가 되긴 했다.

 

근데 시간 4400ms대가 나오는데;;; 제한시간을 몇초로 잡아놨는지 모르겠다