[프로그래머스] 피로도
·
알고리즘 이론/백준
풀이 : 처음 접근했을 떄, 생각난 방법은 필요 피로도는 내림차순 소모 피로도는 오름차순으로 정렬 후 그리디로 접근하는 방법을 생각했다. 하지만 조건을 확인해보니, 던전이 8개로 제한 되있다. 때문에 안전하게 모든 경우의 수를 모두 탐색하는 방법으로 선택하였다. 방법 1) - next_permutation 모든 경우의 순열을 만들도록 사용했다 #include #include #include #include using namespace std; void permutation(int k, vector& dungeons, int & answer){ vector per; int tempK = k; for(int i=0;i k) continue; check[i] =true; DFS(now+1, k-dungeons..
[백준] 11059 크리 문자열 c++
·
알고리즘 이론/백준
11059. 크리 문자열 https://www.acmicpc.net/problem/11059 11059번: 크리 문자열 첫째 줄에 문자열 S가 주어진다. S는 숫자로만 이루어져 있으며, 길이는 1,000을 넘지 않는다. 항상 크리 문자열이 존재하는 입력만 주어진다. www.acmicpc.net 입력의 길이는 1000을 넘지 않는다. 입력의 길이가 굉장히 큰 것은 아니기때문에 부담을 갖지 않아도 될 것 같다. 크리 문자열이 무엇일까? 대칭되는 짝수 길이의 문자열을 의미하는 것인가? (처음 필자는 대칭되는 것만 말하는 줄 알았다..ㅎ;ㅎ;;;;) 대칭이 안되어도 합만 같으면 된다!! int main() { ios::sync_with_stdio(0); cout.tie(); cin.tie(); cin >> s;..
[5032] 탄산 음료 C++
·
알고리즘 이론/백준
5032. 탄산음료 https://www.acmicpc.net/problem/5032 5032번: 탄산 음료 첫째 줄에 준민이가 가지고 있는 빈 병의 수 e, 그날 발견한 빈 병의 수 f, 새 병으로 바꾸는데 필요한 빈 병의 개수 c가 주어진다. (e < 1000, f < 1000, 1 < c < 2000) e, f, c는 모두 음이 아닌 정수이다. www.acmicpc.net 반 병의 수 e, 그날 발견한 빈 병의 수 f, 새 병으로 바꾸는데 필요한 빈 병의 개수 c가 주어진다. 이를 활용해서 먹을 수 있는 탄산음료의 개수를 출력해야한다. 첫번째 예제 입력을 살펴보자. 입력은 9 0 3이고 출력은 4이다. 많은 사람들이 여기서 많은 고민을 했을거 같다. "처음에 9병이 있었고 0병을 발견했으면 바꿀 수..
[백준] 2863 이게 분수?
·
알고리즘 이론/백준
2863. 이게 분수? https://www.acmicpc.net/problem/2863 2863번: 이게 분수? 첫째 줄에 표를 몇 번 돌려야 표의 값이 최대가 되는지 출력한다. 만약, 그러한 값이 여러개라면 가장 작은 값을 출력한다. www.acmicpc.net 입력으로 100보다 작은 양의 정수 4개가 입력되고, 이 정수들을 시계방향으로 돌린 후 함수에 해당값을 넣어 계산하는 문제이다. 우선 입력되는 정수가 4개로 고정되어있으므로 결과값이 총 4개가 나온다. 이 문제를 처음 접근할 때, 규칙을 찾아서 각 자리의 인덱스가 어떻게 변화하는 지를 찾아내려고 했지만 결론적으로 경우의 수가 4개밖에 없기 때문에 규칙을 찾아도 주먹구구식 방식이 더 빠르고 간편하다는 결론이 나왔다. 앗! 그리고 필자가 문제를 ..
[백준] 1427 소트인사이드 c++
·
알고리즘 이론/백준
1427. 소트인사이드 https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 이 문제는 굉장히 쉽다. 입력받은 후 정렬만하면 끝이다! 문제가 아무리 쉬워도 우리가 확인할 것이 있다. 바로 N의 범위!!! N은 1,000,000,000보다 작거나 같은 자연수이다. 때문에 int를 사용할 수 있다. long long을 사용해야하는 경우가 있을 수 있으니 항상 입력의 범위를 잘 확인하자! 이 문제는 앞서 풀이를 올렸던 문제들의 코드를 합치면 된다. 가장 먼져 N을 입력받고, 각 자리 수를 벡터에 저장한다. cin >> num; while (n..
[백준] 1065 한수 c++
·
알고리즘 이론/백준
1065. 한수 https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 제출 수가 굉장히 높은 것으로 보아 이 문제 역시 중요한 기초문제인것 같다. 하지만 필자는 문제의 풀이를 생각해내는데 꽤 많이 고민했다. 문제에서 주어진 '한수'를 어떻게 저장하면 좋을지 고민해가며 100~999까지의 '한수'를 모두 종이에 적어보았지만 어떠한 규칙도 발견하지 못했고, 규칙이 있어도 굉장히 복잡해질 것 같았다. 때문에 입력이 주어지면 입력된 정수까지의 한수를 모두 찾아..
[백준] 1026번 보물 c++
·
알고리즘 이론/백준
1026. 보물 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 제출 수가 굉장히 큰 것을 보아, 알고리즘의 기초를 다루는데 있어 의미있는 문제라고 생각한다. 풀이: 문제에서 B는 재배열하면 안된다는 조건을 주었지만, 아이러니하게도 해당 알고리즘을 구현하는데 있어서 B의 순서를 바꾸어도 정답에는 아무런 영향이 없다. 우선 주어진 배열의 길이 N은 50보다 작거나 같은 자연수이기 때문에 시간제한은 크게 걱정하지 않아도 된다. 다만 매번 주의 깊게 살펴볼 것은 문제에서 배열의 원소들이 제시될 때, 이 원소..
[백준] 2798 블랙잭
·
알고리즘 이론/백준
https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 브루트 알고리즘을 활용하는 문제이다. 즉, 모든 경우의 수를 살펴보고 답을 구하는 것이다. 변수 ret에는 M과 3개의 숫자를 선택했을 때의 합과의 차이를 저장한다. 문제에서 3개의 원소의 합이 M을 넘어가면 안된다고 했으므로, M보다 작을 경우에만 저장하면된다. 또한 M과 세개의 수의 합의 차가 가장 작아야하므로, ret가 더 작은 경우가 발생할 경우 값을 업데이..