본문 바로가기

전체 글

(105)
2667번: 단지번호붙이기 DFS로 탐색하면서 단지에 각 집마다 checkNum을 +1한다. 한단지가 종료되면 checkNum을 +1한다. 전체 탐색이 완료된 후 정렬을 통해 오름차순으로 세우고 답을 출력한다. #include #include #include typedef struct { int y, x; } dif; dif dir[4] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} }; int count[1000] = { 0 }; int check[30][30] = { 0 }; int size; std::string map[30]; void DFS(int checkNum, int y, int x) { if (check[y][x]) { return; } count[checkNum]++; check[y][x] =..
[미해결]2632번: 피자판매 도데체 어디서 틀리는지 모르겠다... 찾을 수 있으려나 #include #include #include int main(void) { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int size; std::cin >> size; int aLen, bLen; std::cin >> aLen >> bLen; std::vector aVal(aLen), bVal(bLen); for (int i = 0; i > aVal[i]; } for (int i = 0; i > bVal[i]; } std::vector aSum; for (int front = 0; front
2579번: 계단 오르기 10번이 넘는 실패를 겪었다. dp문제는 정말 너무 사악하다. 얼마나 많이 풀어봐야 적응할 수 있을까?... #include #include #include long long dp[310] = { 0 }; int main(void) { int len; std::cin >> len; std::vector val; for (int i = 0; i > temp; val.push_back(temp); } //std::reverse(val.begin(), val.end()); if (val.size() > 2) { dp[0] = val[0]; dp[1] = val[0] + val[1]; dp[2] = val[1] + val[2] > val[0] + val[2] ? val[1] + val[2] : val[0] + ..
2331번: 반복수열 (수열이 반복되는 지점까지의 이동횟수 - 처음으로 반복되는 지점부터 왕복하는데 이동횟수)를 계산하면 답을 구할 수 있다. #include #include int check[1000000] = { 0 }; int square(int n, int degree) { int ans = n; for (int i = 0; i
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