본문 바로가기

전체 글

백준 - 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.. 더보기
백준 - 15661 링크와 스타트(Java) https://www.acmicpc.net/problem/15661 15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 백트랙킹(Backtracking) 문제 입니다. 백트랙킹이란, 탐색을 하면서 조건에 맞지 않는 부분을 가지치기하여 탐색의 범위를 줄이는 방법입니다. 그렇기 때문에 완전 탐색에 비해 메모리 및 시간에 이점이 있습니다. 이 문제에 두 가지 팀이 있으며, 2차원 배열이 주어졌을 때 두 팀간의 격차를 구하는 문제입니다. 2차원 배열 안에 적혀져 있는 값들은 행.. 더보기