본문 바로가기

전체 글

백준 - 2470 두 용액(Java) https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 투포인터 문제입니다. 투포인터란, 말 그대로 두 개의 포인터를 사용해 문제를 해결하는 방식입니다. 두 개의 포인터는 배열의 인덱스 번호로 사용합니다. 투포인터는 크게 두 가지로 탐색 방법을 나눌 수 있습니다. 2개의 포인터가 다른 위치에서 시작하여 서로에게 다가가는 방향(정렬된 배열에서 주로 사용됨) 2개의 포인터가 같은 위치에서 시작하여 같은 방향으로 탐색 위 .. 더보기
백준 - 21921 블로그(Java) https://www.acmicpc.net/problem/21921 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다 www.acmicpc.net 누적합 문제입니다. 일정 범위가 주어졌을 때, 최대 누적합과 그 개수를 구하는 문제입니다. 예를 들어 설명하겠습니다. {1, 4, 2, 5, 1} 배열이 있고 구간의 크기가 2라고 했을 때 최대 누적합은 7이며 그 개수는 1개 입니다. {1, 1, 1, 1, 1, 5, 1}배열이 있고 구간의 크기가 5라고 했을 때 최대 누적합은 9이며 그 개수는 2개 입니다. 시간 복잡도가 O(N^2)인 .. 더보기
백준 - 2110 공유기 설치(Java) 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 파라매트릭 서치(Parametric Search) 방법입니다. 파라매트릭 서치는 '최적화 문제를 결정 문제로 바꾸는'방법입니다. 이 것은 이분탐색과 매우 유사한데, https://www.crocus.co.kr/1000에 매우 잘 설명이 되어 있느니 꼭 읽어보시기 바랍니다. 이 문제에 파라매트릭 서치를 적용하면 다음과 같이 문제를 변형해서 해석할 .. 더보기
백준 - 1629 곱셈(Java) https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 분할과 정복 문제입니다. 분할과 정복은 크게 세 단계로 나눌 수 있습니다. Divide : 문제 분할 Conquer : 쪼개진 작은 문제 해결 Combine : 해결된 작은 문제를 다시 합침 위 특성 때문에 Top-Down 재귀 방식으로 해결해야 합니다. 문제 자체는 간단하지만 난이도에 비해 정답률이 매우 낮습니다. 그 이유는 수학의 두 가지 법칙을 사용해야 합니다. 지수 법칙 : a^b = a^(b/2) * a^(b/2) 나머지 법칙 : (a*b)%c = (a.. 더보기
백준 - 12865 평범한 배낭(Java) https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 가장 유명하고 대표적인 DP 문제라 생각합니다. 물건의 개수 N과 N만큼 각 물건의 가중치가 주어집니다. 가방이 견딜 수 있는 최대 무게 K가 주어졌을 때, 가방에 넣을 수 있는 물건의 최대 가중치를 구하는 문제입니다. 이 문제를 해결하기 위해서는 물건과 무게에 따른 가중치를 저장할 2차원 배열이 필요합니다. 2차원 배열의 행은 물.. 더보기
백준 - 11053 가장 긴 증가하는 부분 수열(Java) https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net DP 문제입니다. 특정 수열이 주어졌을 때, 해당 수열 안에서 오름 차순으로 증가하면서 가장 긴 부분 수열 길이를 찾는 문제입니다. 예를 들어 {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 으로 길이는 4 입니다.(볼드체로 강조 .. 더보기
백준 - 2579 계단 오르기(Java) https://www.acmicpc.net/problem/2579과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점" data-og-host="www.acmicpc.net" data-og-source-url="https://www.acmicpc.net/problem/2579" data-og-url="https://www.acmicpc.net/problem/2579" data-og-image="https://scrap.kakaocdn.net/dn/dqqSyL/hyPMO2v6Ce/xrdbIZlktaMNWviMXTt23K/img.png?width=2834&height=1480&face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/j9lK.. 더보기
백준 - 1932 정수 삼각형(Java) https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net DP 문제입니다. 문제에 의하면 위에서 부터 좌측 하단 또는 우측 하단 둘 중 하나를 선택하여 최하단으로 내려왔을 때, 합이 최대가 되게 만들어야 합니다. 이를 반대로 생각하면 현재 위치에서의 최대는 좌측 상단 또는 우측 상단의 최대를 선택해 현재를 더하면 됩니다. 현재를 (i, j)라고 했을 때, 좌측 상단 및 우측 상단의 좌표 값은 다음과 같습니다. 좌측 상단 : (i-1, j-1) 우측 상단 : (i-1, j) 즉, 점화식은 dp[i][j] = max(dp[i-1.. 더보기