알고리즘/BOJ 1235

백준 15720번 카우버거

문제 링크입니다: https://www.acmicpc.net/problem/15720 기말고사 전에 풀었던 중앙대 CodeRace 2018을 마저 풀기로 마음을 먹었습니다.카우버거 문제는 C++에서 정렬 알고리즘을 제공하기 때문에 쉽게 풀 수 있었습니다.버거, 사이드 메뉴, 음료의 갯수 중 제일 작은 값이 세트의 갯수입니다.버거, 사이드 메뉴, 음료를 내림차순 정렬한 다음에 세트의 갯수만큼은 10% 할인해주고 나머지는 정상가격으로 더해주면 쉽게 풀 수 있는 문제였습니다. #include #include #include #include using namespace std; const int MAX = 1000 + 1; int B, C, D; vector burger, side, beverage; void ..

알고리즘/BOJ 2018.06.15

백준 1916번 최소비용 구하기

문제 링크입니다: https://www.acmicpc.net/problem/1916 백준 1753번(http://jaimemin.tistory.com/555)이랑 똑같은 문제였습니다.문제에서 버스들은 결국 그래프 내의 간선들이였기 때문에 동일하게 풀 수 있는 문제였습니다.Priority Queue는 Default로 작은 값들이 우선순위가 높기 때문에 - 를 해서 우선순위 큐에 집어넣어주는 것이 핵심이였습니다.그리고 정점이 0이 아닌 1부터 시작하므로 n++ 해주는 것도 중요했습니다. #include #include #include using namespace std; const int CITYMAX = 1000 + 1; const int BUSMAX = 100000 + 1; const int INF = ..

알고리즘/BOJ 2018.06.15

백준 13703번 물벼룩의 생존확률

문제 링크입니다: https://www.acmicpc.net/problem/13703 간단한 DP 문제였습니다.똑같은 확률로 1초당 한칸 위로 올라가거나 한칸 내려갈 수 있기 때문에 두 가지 모두 고려했습니다.저와 다르게 시간을 오름차순으로 구해도 동일하게 답을 구할 수 있을 것 같습니다! #include #include using namespace std; const int DEPTHMAX = 63 * 2 + 1; //63에서 63초 뒤까지 const int MAX = 63 + 1; int k, n; long long cache[DEPTHMAX][MAX]; long long isAlive(int depth, int seconds) { if (!depth) //수심 도달하면 잡아먹힌다 return 0; ..

알고리즘/BOJ 2018.06.15

백준 15820번 맞았는데 왜 틀리죠?

문제 링크입니다: https://www.acmicpc.net/problem/15820 기말고사 끝나고 처음 푸는 문제라 쉽고 재밌는 문제를 풀었습니다.알고리즘 문제를 풀 다 보면 테스트 케이스에서 주어진 답은 나오는데 시스템 테스트 케이스에서 틀려서 "왜맞틀"이라는 말을 많이 했는데 저만 그런게 아닌가봅니다 ㅋㅋ #include using namespace std; int S1, S2; //샘플 테스트 케이스, 시스템 테스트 케이스 int main(void) { cin >> S1 >> S2; int result = 0; //정답일 경우 0, 샘플 테스트 틀리면 1, 시스템 테스트 틀리면 2 for (int i = 0; i ..

알고리즘/BOJ 2018.06.15

백준 13702번 이상한 술집

문제 링크입니다: https://www.acmicpc.net/problem/13702 이진탐색(Binary Search) 문제였습니다.막걸리 나누는 양을 1부터 순차적으로 탐색을 진행하는 것보다 이진탐색을 통해 탐색을 진행하면 효율적으로 탐색을 할 수 있습니다.막걸리를 나눌 수 없는 경우가 있을 수 있기 때문에 low를 0으로 잡았고 막걸리의 용량이 (2^31 - 1) 보다 작다고 했으니 high를 (2 ^ 31 - 1)로 잡은 뒤 이진탐색을 진행했습니다! overK 함수는 문제에서 K명에게 막걸리를 똑같이 나누라는 요구사항을 충족하는지 판별하는 함수입니다. #include using namespace std; const int INF = 1 = low) { int mid = (low + high) / ..

알고리즘/BOJ 2018.05.26

백준 1260번 DFS와 BFS

문제 링크입니다: https://www.acmicpc.net/problem/1260 자료구조 시간에서 다루었던 BFS(Breadth First Search)와 DFS(Depth First Search)를 복습할 겸 풀어봤던 문제였습니다.실제로 BFS와 DFS는 자주 다루어지는 알고리즘이기 때문에 익숙해져있어야 하는 알고리즘입니다. BFS는 방문한 노드로부터 아직 방문하지 않은 인접한 모든 노드를 큐에 추가하는 방식으로 너비 우선 탐색을 진행하고 DFS는 방문한 노드에서 아직 방문하지 않은 인접한 노드로 옮겨가는 식으로 깊이 우선 탐색을 진행합니다. #include #include #include using namespace std; const int MAX = 1000 + 1; int N, M, V; i..

알고리즘/BOJ 2018.05.24

백준 13700번 완전 범죄

문제 링크입니다: https://www.acmicpc.net/problem/13700 처음에는 DP로 접근했던 문제였습니다.이론상 맞는 것 같은데 계속 인덱스 3 2 1만 왔다갔다하며 반복해서 곰곰히 생각해 본 결과 문제점을 발견했습니다.다음에 방문한 idx가 꼭 최적의 방법을 반환하는 것이 아닌데 마치 다음에 방문하는 인덱스가 최적의 결과를 반환할 것이라고 성급하게 일반화했던 것이 큰 오류였습니다. #include #include #include //memset using namespace std; const int MAX = 100000 + 1; const int INF = 987654321; int N, S, D, F, B, K; int building[MAX]; int cache[MAX]; int..

알고리즘/BOJ 2018.05.24

백준 13698번 Hawk eyes

문제 링크입니다: https://www.acmicpc.net/problem/13698 A, B, C, D, E, F에 대해 적절하게 swap 함수를 적용하면 되는 문제였습니다.C++에서는 swap 함수를 제공하기 때문에 매우 쉬운 문제였습니다. #include #include using namespace std; int arr[4]; string S; void printLocation(void) { for (int i = 0; i < S.length(); i++) { switch (S[i]) { case 'A': swap(arr[0], arr[1]); break; case 'B': swap(arr[0], arr[2]); break; case 'C': swap(arr[0], arr[3]); break; c..

알고리즘/BOJ 2018.05.23

백준 15719번 중복된 숫자

문제 링크입니다: https://www.acmicpc.net/problem/15719 http://jaimemin.tistory.com/498에서 사용한 기법을 그대로 사용하면 됩니다.int형 변수는 32비트인 것을 이용하여 비트마스크를 적용하면 시간 내에 중복된 숫자를 찾을 수 있습니다! #include using namespace std; const int MAX = 10000000; int N; int arr[MAX]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); //cin의 속도를 극대화 cin >> N; for (int i = 0; i > temp; //int형 변수는 32bit if (..

알고리즘/BOJ 2018.05.22