본문 바로가기

백준

(224)
[COCI] 백준 9935 - 문자열 폭발 icpc.me/9935 받은 문자열 s를 반복문을 통해 스트링 a에 한글자씩 넣어주자. a에 넣은 마지막 글자가 터트려야 할 문자열 b의 마지막 문자와 일치하는지 확인한다. 일치하지 않는다면 반복문을 계속하면 되고, 일치한다면 a의 마지막부터 검색하여 a의 끝부분이 b와 일치하는지 확인한다. 만약 문자열이 일치한다면 그만큼 터트리고 반복문을 진행시키면 된다. 이 과정을 반복해서 나온 a가 답이 된다. a의 길이가 0이면 FRULA를 출력해주자. 전체 코드 더보기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include..
[KOI] 백준 1983 - 숫자 박스 icpc.me/1983 관찰 주어진 숫자 박스에서 숫자를 옮기는 것을 시뮬레이션하면 원하는 답을 구할 수 없을 것이다. 각 숫자의 위치는 순서를 바꾸지 않는 범위에서 자유롭게 옮길 수 있다는 점에 주목해보자. 그렇다면 숫자들이 모두 한쪽에 치우친 상태이고, 상황에 따라 빈칸을 적절히 남겨두는 방식으로 숫자 박스의 값을 최대화시킬 수 있을 것이다. 점화식 이 아이디어를 통해 문제를 해결하고자 한다면 다음과 같은 테이블을 생각할 수 있을 것이다. dp[i][j][k] := i번째 열까지 첫 번째 행에서 빈칸 0을 포함한 j개의 숫자, 두 번째 행에서 빈칸 0을 포함한 k개의 숫자를 사용했을 때 숫자 박스의 최댓값 N은 400이하이므로 400 * 400 * 400 * 4(byte) = 256mb가 나와 문제의..
백준 2176 - 합리적인 이동경로 www.acmicpc.net/problem/2176 솔루션 1. 더보기 모든 정점 사이의 최단 경로를 구한 다음 그래프 DP를 수행하면서 "합리적인 이동경로"를 탐색하면 간단하게 AC를 받을 수 있다. 전체 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 #include using namespace std; usi..
[USACO] 백준 15591 - MooTube (Silver) www.acmicpc.net/problem/15591 N, Q > n >> q; vector al(n + 1); for (int i = 0; i > go >> to >> val; al[go].push_back({to, val}); al[to].push_back({go, val}); } while (q--) { int k, from; cin >> k >> from; cout
백준 1947 - 선물 전달 icpc.me/1947 인문계 고등학교에서 경우의 수를 공부해봤다면 한 번쯤 봤을 법한 교란순열(완전순열)의 대표 예제임을 알 수 있다. 교란순열에 대해 배우지 않았다면 여기를 참조하자. 그때 그 시절, 아무래도 교란순열의 점화식은 알려주지 않았을지도 모른다. 하지만 우린 이 문제를 풀어야 하므로 점화식을 배우도록 하자. 교란순열의 점화식은 다음과 같다. $D_n = (n - 1)(D_{n-1} + D_{n-2}) \ (D_0 = 1, D_1 = 0)$ 동적계획법을 통해 점화식을 구현하도록 하자. 물론 오버플로우도 주의해주자.