본문 바로가기

반응형

백준

[BOJ 2672] 여러 직사각형의 전체 면적 구하기 [문제] www.acmicpc.net/problem/2672 2672번: 여러 직사각형의 전체 면적 구하기 첫째 줄에 직사각형의 개수 N(1 ≤ N ≤ 30)이 주어지고 그 다음 N줄에는 각각의 직사각형에 대한 자료가 주어진다. 이 자료는 4개의 숫자로 표시되는데 첫째, 둘째 숫자는 직사각형의 왼쪽 아래 모 www.acmicpc.net [필요 개념] - 스위핑 (Sweeping) [난이도] - Gold 2 (solved.ac 20.10.29 기준) [풀이] N의 크기가 작아서 여러 풀이 방법이 가능하지만, 대체로 이런 유형은 '스위핑'으로 풀리는 경우가 많다. 우선, 주어지는 입력이 조금 특이한데 알고 보면 크게 다르지 않다. 각 사각형의 왼쪽 아래 꼭짓점의 좌표와 사각형의 폭, 높이가 소수로 주어진다...
[BOJ 2336] 굉장한 학생 [문제] : https://www.acmicpc.net/problem/2336 2336번: 굉장한 학생 문제 N명의 학생이 참여하여 세 번의 시험을 치렀다. N명의 학생들은 세 번의 시험에 모두 응시하였다. 조교는 각각의 시험에서 같은 등수의 학생이 한 명도 없도록 성적을 매겼다. A라는 학생이 www.acmicpc.net [난이도] - Platinum 2 (2020.08.05 solved.ac 기준) [개념] - 세그먼트 트리 (Segment Tree) [풀이] 우선 https://jason9319.tistory.com/57 블로그의 설명을 참고하여 풀이를 하였다. 문제를 요약하자면, 각 학생이 세 번의 시험에 참여하였고, 학생 A보다 세 과목이 모두 더 높은 등수인 사람이 없다면 A를 '굉장하다'라고..
[BOJ 2437] 저울 [문제] : https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓� www.acmicpc.net [개념] - 그리디 (Greedy) 알고리즘 [풀이] 아이디어만 떠올린다면 생각보다 쉬운 문제이다. N개의 추가 주어졌을 때, 추들을 이용하여 측정할 수 없는 무게 중 가장 작은 무게를 구하는 것이다. 첫 번째로, 측정할 수 있는 무게들을 모두 구하는 것은 당연히 풀이의 의도가 아니라는 것을 알 수 있어야 한다. 완전 탐색으로 구한다고 한다면 추의 개수가 최대 1000개이므로 경우의 수가 최대..
[BOJ 8980] 택배 [문제] : https://www.acmicpc.net/problem/8980 8980번: 택배 입력의 첫 줄은 마을 수 N과 트럭의 용량 C가 빈칸을 사이에 두고 주어진다. N은 2이상 2,000이하 정수이고, C는 1이상 10,000이하 정수이다. 다음 줄에, 보내는 박스 정보의 개수 M이 주어진다. M은 1이 www.acmicpc.net [필요 개념] - 그리디 (Greedy) 알고리즘 [풀이] 문제 난이도 치고 (풀이일 기준 Gold 4) 생각보다 풀이 방법이 쉽게 떠오르지 않은 문제였다. 처음에는 보내는 마을을 오름차순으로 정렬한 후, 현재 트럭에 있는 박스 개수를 계속 비교하면서 더 채울 수 있으면 채우고, 내릴 수 있으면 내리는 방식으로 하였으나 당연히 WA를 받았다. 다음과 같은 반례가 있..
[BOJ 2568] 전깃줄 - 2 문제 출처 : https://www.acmicpc.net/problem/2568 2568번: 전깃줄 - 2 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100,000 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 위치의 번호가 차례로 주어진다. 위치의 번호는 500,000 이하의 자연수이고, 같은 위치에 두 개 이상의 전깃줄이 연결될 수 없다. www.acmicpc.net LIS (Longest Increasing Subsequence, 최장 증가 부분 수열) 유형의 문제이다. 전깃줄이 순서없이 입력되기 때문에 A 또는 B를 기준으로 정렬을 해주어야 한다. A를 기준으로 정렬한다면, 정렬된 후의 B 수열을 가지고..
[BOJ 1725] 히스토그램 1725번 (히스토그램) 위의 문제는 분할 정복 알고리즘을 이용해서 해결할 수 있다. 분할 정복은 주어진 문제를 부분 문제들로 나누어 푸는 것이기 때문에 이 문제 또한 히스토그램을 나누어 푸는 것이 핵심이다. 따라서 주어진 n개의 막대그래프를 절반으로 나누게 되면 결국 찾고자 하는 가장 큰 직사각형은 다음 세가지중 하나에 속하게 된다. 1. 왼쪽 부분 문제에서 가장 큰 직사각형이 존재하는 경우 2. 오른쪽 부분 문제에서 가장 큰 직사각형이 존재하는 경우 3. 가장 큰 직사각형이 왼쪽 부분 문제와 오른쪽 부분 문제에 걸쳐 있는 경우 1번과 2번의 경우에는 재귀 호출을 이용하면 되고, 3번의 경우만 특별히 고려한다면 답을 구할 수 있을 것이다. 문제에서 출력이 20억을 넘지 않는다고 하였으니, 변수 자료형을..
[BOJ 1992] 쿼드트리 1992번 (쿼드트리) 위와 같이 문제가 주어져 있다. 주어진 크기 안의 숫자가 모두 0이거나 모두 1이어야 하고, 만약 이를 만족하지 않는다면 다시 사각형을 4등분하기 때문에 재귀함수를 이용해야 한다는 생각을 할 수 있다. 따라서 분할정복으로 아래와 같이 코드를 작성하면 된다. quadtree라는 재귀함수를 작성하여, 해당 사각형내의 숫자가 모두 같은 경우에는 그 숫자를 출력하고, 같지 않다면 ( 괄호를 출력하고, 4등분한 사각형에 각각 재귀함수를 호출해준다.
[BOJ 2166] 다각형의 면적 2166번 (다각형의 면적) CCW 알고리즘을 이용하여 다각형의 꼭짓점만으로 다각형의 면적을 구하는 문제이다. 코드의 자세한 원리는 CCW(Counter-ClockWise) - (2) 게시글 (https://wogud6792.tistory.com/12) 에서 확인할 수 있다. 주어지는 점들의 좌표가 모두 정수인데 왜 실수로 출력하라는지 정확히는 모르겠지만.. 이것때문에 꽤나 애를 먹었다.