본문 바로가기
728x90
반응형

전체 글77

[algorithm] 백준 - 스타트와 링크 이 문제는 재귀 문제이다. 사람을 스타트팀에 넣는 경우, 링크 팀에 넣는 경우로 재귀 함수를 구현한다. 스타트팀에 구성된 인원 수 : n/2 링크 팀에 구성된 인원 수: n/2 가 아닌 경우도 포함되겠지만, N(4 ≤ N ≤ 20, N은 짝수) 이므로 2초를 넘을 위험은 없다. start.push_back(index); permutation(index + 1); start.pop_back(); link.push_back(index); permutation(index + 1); link.pop_back(); 스타트팀과 링크팀에 구성된 인원 수가 n/2로 채워졌을 때, 능력치를 더하고, 가장 능력치 차가 나지 않는 경우의 수를 저장한다. if(index == n){ if(start.size() ==n / 2.. 2020. 11. 17.
[algorithm] 백준 - 단어수학 이 문제를 greedy로 풀었다. 알파벳 별로 자릿수를 더한 수를 구한 후 배열 내에 담는다. ABCA A) 1001 B) 100 C) 10 for(int i = 0; i = 0; j--){ word[wordVector[i][j] - 'A'] += powNum; powNum *= 10; } } 그리고 알파벳 배열을 내림차순으로 정렬 후 9부터 0까지 자릿수를 더한 수와 곱하면 알파벳 수의 합을 최대로 만들 수 있다. 9009 + 800 + 70 = 9879 sort(word, word + 26, compare); int number = 9, answer =.. 2020. 11. 14.
[algorithm] 백준 - 소인수분해 브루트 포스로 해결할 수 있다. n이 1이 될 때까지 나누어준다. //소인수분해 #include using namespace std; int main(void){ int n, k = 2; cin >> n; while(n != 1){ if(n % k == 0){ n = n / k; cout 2020. 11. 13.
[algorithm] 백준 - 부분 수열의 합 2 brute force 문제이다. 정수의 개수는 40개이므로 2 ^ 40 번의 연산을 필요로 하니까 시간 제한 내에 풀기 위해 반으로 쪼개서 연산해야한다. 절반을 기준으로 leftDfs rightDfs로 나누어서 풀었다. leftDfs의 경우, 부분 수열의 합의 개수를 저장하고, rightDfs에서는, 구하고자 하는 합 - rightDfs에서 연산한 부분 수열의 합이 있는지 찾은 후 answer에 추가시키는 방식으로 풀었다. 그리고 구하고자 하는 합이 0일 경우, leftDfs에서 부분 수열의 합에 포함되는 수가 없는 경우, rightDfs에서 부분 수열의 합에 포함되는 수가 없는 경우로 동일한 경우가 2번 연산되므로 한번 빼준다. //부분 수열의 합2 #include #include #include #i.. 2020. 11. 10.
728x90
반응형