본문 바로가기

분류 전체보기

(147)
백준 1060: 좋은 수 https://www.acmicpc.net/problem/1060 이 문제는 이해가 되지 않아서 몇번이고 다시 읽어서 겨우 이해했다. 책을 좀 더 읽어야할지도 모르겠다.요약하자면, 집합 S의 수들을 포함하지 않는 연속된 구간들이 있는데, 이 구간에 포함된 수의 갯수가 적은 순서대로 제시하란 이야기이다. 예시 2번을 예로들면, 구간을{1, 2, 3, 4}, {5}, {6, 7, 8, 9, 10}, {11}, {12, 13, 14, 15, 16, 17}, {18}, {19, ......}이렇게 나눌수 있다 이 때, 집합 S에 포함된 5, 11, 18은 가장 안 좋은 구간으로 먼저 제시되고,{1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}로 4개인 가장 적은 구간 부분 집합을 갖고 가장 작은 ..
백준 5588: 별자리 찾기 https://www.acmicpc.net/problem/5588 약 10분 간 고민을 했고, 별자리 위치와 사진 속 별의 위치의 차이를 구한뒤에, unordered_map에 이 차이를 count하고, 이 count가 별자리 별 갯수와 동일하다면, 그것이 정답일것이다란 결론을 내렸다. 그렇게 구성한 코드는 #include #include using namespace std;int N, M, sx[1001], sy[1001], px[201], py[201];struct pairHash {public: size_t operator()(const pair& p) const { return hash()(p.first) & hash()(p.second); }};unordered_map, int, pairHash..
백준 2873: 롤러코스터 https://www.acmicpc.net/problem/2873 결론부터 말하면 이 문제는 구글링으로 답을 얻었다. 며칠동안 너무 생각을 하다, 끙끙 앓는 것 보단 답지를 보는 습관을 슬슬 고쳐야할 것 같다. 내가 퍼즐게임을 즐겨하다 보니 이런 습관이 든것 같은데, 코딩테스트는 퍼즐게임과 달리 시간이 기다리지 않으니까, 앞으로는 확실하게 시간 측정을 하고, 못 풀면 빨리 답을 찾아서, 요령을 습득하자. 처음엔 쉬울 것 같다는 생각과 함게 문제에 임했다. 왜냐하면 모든 칸을 둘러보면 끝이다. 오른쪽 끝으로 갔다가, 아래로 한 칸아래, 왼쪽 끝으로 가는 것을 반복하면 답이 나오겠거니 했다. 그런데, 막상 문제에 도전해보니, 이 방법은 조건이 필요했다는 것을 깨달았다. R이 짝수, C가 짝수 인 경우는 위의..
백준 2647: 검은점과 하얀점의 연결 https://www.acmicpc.net/problem/2647 이 문제는 예전에 해결했던 문제지만, 정말 사소한 실수로 약 4달간 고민을 했고, 겨우 푼 문제이다.사실 이 문제는https://www.acmicpc.net/problem/2673"백준 2673: 교차하지 않는 원의 현들의 최대집합"의 상위호환 문제다.한계치를 DP의 파라미터로 둔다는 점에서, 위의 문제와 비슷하다. 하지만, 이 문제가 더 어려운 점은 누적합 개념이 들어가고 역추적도 해야한다. 그렇기 때문에 더 풀기 힘들다. 일단 DP는 다음과 같이 구하면 된다.DP[현재 위치][현재 위치 한계치][현재 높이 한계치]이 식의 다음 식은min(DP[현재 위치 + 1][매칭 위치 - 1][임의의 높이 한계치] + DP[매칭 위치][현재 한계치..
백준 23268: Deceptive Directions https://www.acmicpc.net/problem/23268 이 문제의 초기 아이디어는 어렵지 않았다. BFS의 층수에 따라, 명령을 매칭해서, 해당 명령과 다른 곳으로 옮길 수 있을 때 옮긴다는 아이디어였다. 그렇게 나온 코드는 다음과 같다.#include #include #include using namespace std;int W, H, sy = 0, sx = 0;char M[1001][1001];bool v[1001][1001];string D;vector input;int dy[4] = { -1, 1, 0, 0 };int dx[4] = { 0, 0, -1, 1 };int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(..
백준 2795: 사업 확장 https://www.acmicpc.net/problem/2795 이 문제를 풀었을 때엔 조금 당황스러웠다. 독특한 아이디어라서 플레는 받을 줄 알았는데, 지금까지 푼 문제중 최고 난이도인 다이아 3이라서, 난이도가 공개되었을 때엔 내 머릿속에 물음표가 가득했었다. 내가 이전에 풀었던 다른 다이아 혹은 플레 상위 문제들이 내 머릿속을 지나갔었지만, 그래도 난이도 높은 문제를 구글링 없이 시간 내에 풀어서 속 시원하니 넘어가자. 이 문제의 주목해야하는 점은 두가지다.첫째, 양방향이 아니다. 그래서 다익스트라로 출발지와 목적지간의 최소 거리를 구해서 이 경로로 왕복하는 것이 답이 아니다.둘째, N은 100이하이고, 몇 번을 방문해도 값을 부과하지 않는다. 그렇기에 이 문제는 목적지에서 출발지까지의 경로를 저..
백준 1866: 택배 https://www.acmicpc.net/problem/1866 오랜만에 고전하게 된 DP 문제다. 처음에 떠올린 점화식은 다음과 같다.DP[현재 위치][중심 위치] = min(DP[현재 위치 + 1][중심 위치] + 트럭비용 * (중심과 현재간 거리), DP[현재 위치][다른 위치] + 헬리콥터 위치) 단순하지만, 떠오르기 쉽지 않아서, 이게 답이다! 라며 돌진하였다. 안타깝게도, "시간 초과"란 결과를 얻었지만...#include #include #include #include using namespace std;int N, dp[3001][3001], P[3001], T, H;int solve(int idx, int mid){ if (idx > N) return 0; int& ret = dp[id..
백준 21758: 꿀 따기 https://www.acmicpc.net/problem/21758 이 문제는 너무 어렵게 생각했던 것 같다. 초기엔 꿀통 위치를 조정하며 가장 최적의 위치를 구하면 되지 않을까란 생각을 했지만, 꿀벌 위치를 어떻게 할지를 고민을 많이 했다. 그런데, 머릿속에서 여러 반례를 떠올리다보니 적어도 하나의 꿀벌은 끝에 있다는 공통점을 발견했다. 그럼 그리디적으로 생각해서 꿀통도 늘 끝에 두고, 남은 꿀벌의 위치를 조정하며 답을 구하면 어떨까란 생각을 하게되었다. 그렇게 나온 코드는 다음과 같다.#include #include using namespace std;int N, A[100001], S1 = 0, ans = 0, S2 = 0;int main(){ ios_base::sync_with_stdio(fals..