교각 놓기(실패)

문제 링크: https://www.acmicpc.net/problem/1276

 

1276번: 교각 놓기

첫째 줄에 다리의 개수를 나타내는 정수 N(1≤N≤100)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄에 다리의 위치를 나타내는 세 정수 Y, X1, X2가 주어지는 이는 (X1, Y)부터 (X2, Y)까지 다리가 놓여

www.acmicpc.net

 

현재 실패한 상황이다.
코드 수정 후 재업로드 예정

 

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;

class bridge {
public:
    int y;
    int x1;
    int x2;
    bridge(int a, int b, int c) {
        this->y = a;
        this->x1 = b;
        this->x2 = c;
    }
};
bool compare(bridge* a, bridge* b) {
    if (a->x1 == b->x1)
        return a->x2 < b->x2;
    return a->x1 < b->x1;
}

int main() {
    int n;
    cin >> n;
    deque<bridge*> list;
    for (int i = 0; i < n; i++) {
        int y, x1, x2;
        cin >> y >> x1 >> x2;
        list.push_back(new bridge(y, x1, x2));
    }
    sort(list.begin(), list.end(), compare);
    int count = (list[0]->y);
    for (int i = 1; i < n; i++) {
        if (list[i - 1]->x2 > list[i]->x1) {
            //두 다리가 겹칠경우
            if (list[i - 1]->y < list[i]->y) {
                // 이전 다리가 더 낮을 경우
                count += list[i]->y;
            }
            else if (list[i - 1]->y == list[i]->y) {
                continue;
            }
            else {
                // 이전 다리가 더 높을 경우
                count += list[i-1]->y;
            }
        }
        else {
            // 현재 다리가 이전 다리와 겹치지 않을 경우
            count += (list[i]->y);
        }
    }
    count += list.back()->y;
    for (int i = 0; i < n; i++) {
        cout << list[i]->y << " " << list[i]->x1 << " " << list[i]->x2 << endl;
    }
    cout << count << endl;
    return 0;
}

'ProblemSolving' 카테고리의 다른 글

[BOJ] 5052_전화번호 목록  (0) 2021.02.10
[BOJ] 1269_대칭 차집합  (0) 2021.02.08
[BOJ] 10546_배부른 마라토너  (0) 2021.02.06
[BOJ] 7785_회사에 있는 사람  (0) 2021.02.05
[BOJ] 5397_키로커  (0) 2021.02.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기