목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 문제풀이 N이 9 이상일 때 0~8의 모양이다. 먼저 N이 몇이든 (1, 1), (1, 4), (1, 7), (4, 1), (4, 4), (4, 7),... y%3=1, x%3=1인 좌표는 공백 1칸을 출력한다. 따라서 좌표를 3으로 나눈 나머지가 1이면 공백을 출력하도록 가장 먼저 조건을 걸어둔다. 그다음은 가운데 3x3 짜리 공백을 구하는 조건을 구해야 한다. ..

문제 https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 문제풀이 해당 좌표 X보다 작은 좌표 X가 몇 개 있는지를 출력하는 문제이다. 중복된 X는 개수에 포함이 되지 않는 것 같다. 처음에는 단순하게 for문을 두 번 사용하여 풀고, 이분 탐색으로 풀어봤는데 이중 for문은 시간 초과가, 이분 탐색은 잘 되긴 했지만 시간을 더 줄이기 위해 upper_bound를 사용했다. 입력받는 좌표들을 저장하..

문제 https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 문제풀이 https://www.acmicpc.net/problem/1780 1780문제와 거의 유사하게 풀었다. 1780번과 다른 점은 괄호의 유무와 칸을 분할할때 4등분을 하는점, 개수를 세는 것이 아닌 값을 출력하는 점 이다. 띄어쓰기 없이 입력받으므로 string으로 입력받고 끝자리의 0을 빼고 입력받는다. 0, 0부터 탐색을 시작한다. if (y != prev_y && (..

문제 https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. www.acmicpc.net 문제풀이 첫 줄부터 끝줄까지 최솟값과 최댓값을 구한다. 이전 최솟값, 이전 최댓값 변수를 만들어 이전에 돌린 max, min값들을 저장한다. 이전 최솟값, 이전 최댓값, 현재 최솟값, 최댓값이 다르면 종이를 9 분할한다. 다 같아 반복문을 다 돌면 해당 종이에 적힌 값의 개수를 1 늘린다. int prev_y = y; int prev_x = x; int max_value = 0; ..

문제 https://www.acmicpc.net/problem/11728 11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거 www.acmicpc.net 문제풀이 중복된 수가 있을 수도 있다. 배열 A와 배열 B의 개수만큼 미리 Arr배열의 크기를 정하고, Arr배열에 다 입력받는다. 그다음 sort함수로 정렬하고 출력한다. 코드 #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NU..

문제 https://www.acmicpc.net/problem/2022 2022번: 사다리 첫째 줄에 차례대로 x, y, c에 해당하는 양의 실수 세 개가 입력된다. 수는 소수점 여섯째 자리까지 주어질 수 있다. www.acmicpc.net 문제풀이 닮음을 이용하여 풀었다. 왼쪽 삼각형 오른쪽 삼각형 라는 식을 얻을 수 있다. 또 피타고라스 정리에 의해서 이후에 양변을 루트를 씌우면 h1, h2의 식을 구할 수 있다. 우리는 w1+w2인 값을 구해야한다. 이분탐색을 이용하여 이 값을 구한다. w1+w2를 이분탐색의 mid값으로 두고, h1과 h2값을 구하고 h1*h2/(h1+h2)값과 c값을 비교하면서 문제에 나온 오차가 10^-3 이하로 나오도록 조건을 건다. 코드 #include #include #i..

문제 https://www.acmicpc.net/problem/2512 2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 www.acmicpc.net 문제풀이 예산을 모두 입력받았을 때, 국가예산을 넘지 않는다면 입력받은 예산 중 가장 큰 값을 출력하면 된다. 이 경우가 아니라면 이분탐색을 통해 값을 구해야 한다. 반복문을 통해 입력받은 예산과 상한액 중 작은 값을 sum에 더한다. sum 값이 국가예산의 총액보다 높으면 상한액을 낮춰야 하므로 right를 줄인다. sum 값이 국가예산의 총액 이하이면 상한액을 높여도 되므로 left..

문제 https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 문제풀이 이분 탐색을 하고 한번 진행하는 동안 반복문을 돌려 첫 집부터 마지막 집까지 돌면서 이전 공유기 설치된 집 +mid값 보다 더 긴 거리의 집이 있으면 공유기를 설치하는 식으로 문제를 풀어야 한다. for (idx; idx > house[idx]; sort(house.begin(), house.end()..

문제 https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 문제풀이 자른 나무의 길이의 총합이 M이다. 0m짜리 톱으로 자를 수는 없으니 최솟값을 0으로, 최댓값은 1,000,000,000으로 둔다. while문을 돌면서 이번 차례에 자를 톱의 길이는 (최솟값+최댓값)/2로 두고, 나무 수만큼 돌면서 자른다. 이때 톱보다 긴 나무만 자를 수 있다. 자른 나무의 길이의 총합이 목표치보다 작으면 톱의 길이가 더 짧..