problem solving (93) 썸네일형 리스트형 2089번: -2진수 2진법 변환 방법에서 각 연산마다 -를 곱해서 답을 구할 수 있었다. 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 #include #include #include int main(void) { long long val; std::cin >> val; std::vector arr; while (std::abs(val) > 0) { long long tmp = val % 2; if (tmp != 0) { val = ((val - 1) / 2) * -1; arr.push_back(1); } else { val = (val / 2) * -1; arr.push_back(0); } } std::revers.. 2004번: 조합 0의 개수 5와 2가 나올 수 있는 최소 개수를 구하면 풀 수 있는 문제다. 만약 5로 나눈다면 처음 나눴을 때는 5의 개수 두 번 나눴을 때는 5^2의 개수 세 번 나눴을 때는 5^3의 개수를 구할 수 있다. 이렇게 순서대로 구해 조합 0의 개수를 구했다. #include int countCheck(long long val, int div) { int count = 0; while (val > 1) { count += val / div; val /= div; } return count; } int main(void) { long long n, m; std::cin >> n >> m; long long fiveCnt, twoCnt; long long plusCount, minusCount; plusCount = c.. 1517번: 버블 소트 도저히 모르겠어서 다른 분의 플로그를 참조해서 힌트를 얻었다. 세그먼트 트리 또는 머지 소트를 이용해서 푸는 문제였는데 세그먼트 트리는 모르는 관계로 머지 소트로 풀었다. (머지 소트로 풀이가 가능하다는 것만 떠올리면 어렵지 않은 문제) #include #include long long subArr[500010] = { 0 }; long long count = 0; void mergeSort(std::vector &val, int start, int end) { int mid = (start + end) / 2; if (mid - start > 1) { mergeSort(val, start, mid); } if (end - mid > 1) { mergeSort(val, mid, end); } int cu.. 1991번: 트리 순회 기본적인 트리 개념만 이해하고 있으면 풀 수 있는 문제다. 본인은 두 가지 방법으로 풀었다. 그런데.. 좀 더 효율적이게 구성할 수 있을 거 같아보인다. 나중에 다시 살펴보자. #include #include #include #include void DFS1(std::vector tree[], int cur) { if (tree[cur].size() == 0) { std::cout 1929번: 소수 구하기 알고리즘 분류를 보기 전까지 한참 해맸다. 시간초과를 해결하는 게 관건인데 에라토스테네스의 체를 이용해 해결할 수 있다. #include int check[1000001] = { 0 }; int main(void) { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int min, max; std::cin >> min >> max; check[1] = 1; for (int i = 2; i 1759번: 암호 만들기 가볍게 풀 수 있는 문제 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 #include #include #include #include #include int main(void) { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int len, N; std::cin >> len >> N; std::vector alphabet(N); for (int i = 0; i > alphabet[i]; } std::vector t.. 1525번: 퍼즐 퍼즐을 풀어서 1차원 형태의 문자열을 사용해 문제를 해결했다. 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 #include #include #include #include #include typedef struct { int y, x; } dif; dif dir[4] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} }; in.. 1208번: 부분수열의 합2 상당히 어려웠던 문제다. 1182 부분수열의 합에서 확장된 버전인데 속도가 관건이다. 개수의 범위가 40까지이므로 한번의 재귀 호출로는 해결이 불가능해보인다. 나는 입력 받은 배열을 앞과 뒤, 둘로 나눠 계산을 진행했다. (int형으로는 모든 케이스를 커버하지 못한다) 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 #include #include #include int len, resu.. 이전 1 ··· 8 9 10 11 12 다음