백준147 백준 1915 c++ - 가장 큰 정사각형 [필자 처음 생각 ] 처음 문제를 읽고 DFS, BFS 문제라 생각했지만 모든 정사각형인지 판단하려면 코드를 짜는것도 쉽지 않고 무엇보다 시간복잡도 측면에서 어긋나게 된다는걸 알았다. 다음으로 분할로 사고를 바꿨지만 사각형이 어디에 존재하는지 정확히 알 수 없는 상황에서는 균등하게 분할로 풀 수 없었다. [해결과정] 조금의 사고 과정후 DP문제라는걸 알게 되었다 [KEY POINT] 만약 배열 값이 1이면 사각형 오른쪽 아래 꼭짓점이라 가정을한다. 그 점 기준으로 왼쪽, 위쪽, 왼쪽위의 값중 가장 작은값을 구하고 +1을 해주면 동적프로그래밍 완성이다. #include #include #include #include using namespace std; int Arr[1001][1001]; int N, M.. 2024. 2. 13. 백준 9252 C++ - LCS 2 필자: LCS의 정의를 이해하는데 시간이 걸렸다. 공부해보니 순서대로 각 두 문자열의 가장 긴 공통요소를 구하는 뜻이다. 또한 문제 유형이 DP인걸 이해하는데도 시간이 걸렸다. [핵심 사고 ] 문자가 같으면 DP[i][j]= DP[i-1][j-1] +1 왼쪽 위에서 하나 더해준다. 문자가 다르면 DP[i][j] = max(DP[i-1][j], DP[i][j-1]) 왼쪽 혹은 위쪽중 큰 값을 저장한다. #include #include #include #include using namespace std; int N; int D[1001][1001]; string A, B; vector Path; void getText(int r, int c); int main(void) { cin >> A >> B; for.. 2024. 2. 13. 백준 c++ 13398 - 연속합 2 https://www.acmicpc.net/problem/13398 13398번: 연속합 2 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 필자 처음 사고과정 : DP문제가 이 문제의 해결 KEY다 -> D[idx] 마다 최댓값을 저장하려 했지만 문제의 조건중에 자유롭게 하나의 수를 제거할 수 있다. 라는 이유로 이 방식은 포기했다. 해결과정 : 이 문제의 핵심은 위의 그림처럼 X표시 되는 모든 구간을 조사하여 최댓값이 되는 값을 구해야 되는 문제다. 이러한 이유로 L벡터와 R벡터를 만들었다. L 벡터에는 왼쪽부터 시작하여 배열의 마지막.. 2024. 2. 13. 이전 1 ··· 34 35 36 37 다음