본문 바로가기

분류 전체보기51

백준 22341 사각형 면적 #include #define LM 1000+10 #define INF 199999999 using LL = long long; using namespace std; int N,C; int X,Y; int A,B; int Dx[] = {0,1,0,-1,1,1,-1,-1},Dy[] = {1,0,-1,0,1,-1,1,-1}; void paper(){ if(A 2021. 7. 28.
백준 1766 문제집 algorithm : 위상정렬,우선순위큐 해설 위상정렬과 우선순위큐를 사용 하면 쉽게 풀수 있다. 전에 풀었던 ACM craft와 유사한 문제이다. 그 문제에서 queue에 넣는 것 대신 우선순위큐에 넣으면 된다. 밑에 이러한 식으로 그룹으로 나누었을때 그 그룹의 최소값부터 queue에 들어간다. 처음에는 indegree가 0인 1이 들어간다. 그다음 2와 5를 pq에 넣었을때 pq에서 가장 작은 값은 2이기 때문에 2를 호출하여 3을 pq에 넣는다 그다음 작은 값인 3을 넣고,그다음 4를 넣는다. pq에서 4를 꺼낼때는 indegree가 0이 아니고 1이기 때문에 ans에 추가하지 않고 넘긴다. 이러한 방법으로 ans를 추가하고 마지막에 ans를 축력하면된다 #include #define LM 4000.. 2021. 7. 18.
백준 11286 절댓값 힙 algorithm : priority_queue 해설 priority_queue 경우 가장 큰 수부터 출력하는 성질이 있다. 그렇기 때문에 queue에 넣을 때랑 뺄 때 * (-1) 해서 음수로 만든다. 이런 식으로 면 최솟값부터 priority_queue를 뺄 수 있다. pair first에는 x를 절댓값을 한 것, second는 원래 x값 #include #define LM 1000+10 #define INF 199999999 using LL = long long; using namespace std; int N; int x; priority_queue pq; int Dx[] = {0,1,0,-1,1,1,-1,-1},Dy[] = {1,0,-1,0,1,-1,1,-1}; void input(){ scan.. 2021. 7. 18.
백준 2631 줄세우기 algorithm : DP,LIS 해설 3 7 5 2 6 1 4 이 경우 4번만 교환하면 된다 왜냐하면 3,5,6은 순서를 바꾸지 않아도 되기 때문에 전체 길이에서 배열에서 가장 긴 증가하는 수열(LIS)를 빼면 구할수 있다. #include #define LM 1000+10 #define INF 199999999 using LL = long long; using namespace std; int N; int arr[LM]; int dp[LM]; int ans; int Dx[] = {0,1,0,-1,1,1,-1,-1},Dy[] = {1,0,-1,0,1,-1,1,-1}; void input(){ scanf("%d",&N); for(int i = 1 ; i 2021. 7. 16.