
그리디로 풀 수 있는문제라고 해야할까?! 서로 겹치는 부분이 있다면 방에 갈 수 없다 문제를 풀기 위해서는 뒤부터 보자! 나는 pq를 사용했다 내가 더 뒤에있는 사람부터 보면서 구간을 [a,b]라고해보자 그럼 나의 뒤에있는 사람은 [a`,b`]라고 할 때 1) 갈 수 있는경우 a`b 이 때는 구간이 겹친다 따라서 a`를 저장해뒀다가 다시 pq에 넣어두자 소스코드 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 #include #include #include using namespace std; int n, t; int main() { scanf(" %d", &t); for (int tc = 1..

문제를 이해하는데 오래걸렸던 문제다 야구를 하는데 총 N 이닝동안 진행을 하고 나는 선수들이 어떻게 공을 치는지 알고있다 내가 할 일은 순서만 정해주는 것이다! 여기서 조건은 1번타자는 무조건 4번째에 쳐야하고 이닝이 끝났을 때 이전 이닝에 마지막으로 친 타자 다음 타자부터 시작하고 아웃이 3번 된다면 해당 이닝이 끝난다는것! 구현자체는 어렵지 않은데 엄청 헷갈렸다 특히 점수를 매기는 과정에서 나는 배열을 만들어서 구현했는데 이 부분에서 내 앞의 3타자에게 점수를 줄 때는 답이안나왔고 내 뒤에 3타자로부터 점수를 받을 때는 답이 나왔다..! 구현 실수같은데 왜 그런지는 못 찾았다 어쨌든 문제를 풀어본다면! 먼저 순서를 정해야 하므로 next_permutation을 쓴다! 근데 이 때 order[0] = ..

완탐으로 풀 수 있어서 dfs를 이용해 풀었다 팀을 나눈 후 그래프로 표현하고 dfs를 이용해 내가 우리팀에 갈 수 있는지 체크를 하면 된다 여기서 만약 애초에 그래프가 2개 이상의 연결요소로 구성되어있다면 애초에 2개의 팀으로 나눌 수 없어서 -1 을 출력하고 종료하자! 그럼 그래프를 그린 후를 생각해보자 dfs를 이용해서 origin -> next 로 갈 수 있는지 계속 확인해보며 된다 그 후 만약 같은 팀인데 연결 되어있지않다면 false 아니면 true를 리턴해주고 만약 모든 조건을 만족한다면 팀의 합의 최소를 구해보자 소스코드 (C++) 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..

한번 풀어보려고했는데 한시간이나 걸렸따... 문제를 쉽게 해주기 위해 괄호는 하나의 연산자만 포함한다는걸 모르고 풀다가 나중에 보니 답이 다르게나온다~! 그리고 처음에 한자리수만 줘서 더 쉬운것같다 나처럼 복잡하게 푼 사람은 많이 없을듯..! 그럼 문제를 풀어보자! 우선 비트를 이용해서 짝수 인덱스인 숫자만 봐준다 괄호가 짝이 맞아야 하기 때문에 짝수개 있을 때만 넘겨준다! 110101이면 1~2 ,4~6이 괄호다! 괄호를 체크하고 solve 함수로 넘겨준다 그럼 solve는 괄호가 있는곳은 먼저 cal함수로 계산해주고 마지막에 괄호가 없을 때를 계산해 답으로 넘겨준다 cal에서는 순서대로 앞에서 계산하기 때문에 덱으로 그냥 계산했다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ..