Algorithm Problems (212) 썸네일형 리스트형 [백준/C++] 9252번: LCS 2 문제https://www.acmicpc.net/problem/9252문제 요약두 문자열이 주어졌을 때, 모두의 부분 문자열이 되는 문자열 중 가장 긴 것을 찾아 길이와 함께 출력한다.코드#include #include #include #include #include using namespace std;// dp[i][j]: 문자열 A에서 i번째 문자까지, 문자열 B에서 j번째 문자까지 봤을 때 LCS 길이int dp[1010][1010];string A, B;int lcs_length;string res;int main() { cin >> A >> B; // LCS 길이 구하기 for (int i = 1; i 0 && j > 0) { if (A[i - 1] == B[j - .. [백준/C++] 17626번: Four Squares 문제https://www.acmicpc.net/problem/17626문제 요약자연수 n이 주어졌을 때, n을 제곱수 합으로 나타낼 수 있는 최소 개수를 출력한다.코드#include #include #include using namespace std;int n;// dp[i]: i를 제곱수 합으로 나타낼 수 있는 최소 개수int dp[50050];// n을 제곱수 합으로 나타낼 수 있는 최소 개수를 반환하는 함수int dfs(int n) { // 0을 제곱수 합으로 나타낼 수 있는 최소 개수 = 0 if (n == 0) { return 0; } // 이미 dp[i]를 구했었다면, 바로 반환 if (dp[n] != -1) return dp[n]; // 아니라면.. [백준/C++] 15992번: 1, 2, 3 더하기 7 문제https://www.acmicpc.net/problem/15992문제 요약정수 n을 m개의 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.코드#include #include #include #define ll long longusing namespace std;int t;int dp[1010][1010];ll dfs(int n, int m) { // 음수일 경우 0 if (n > t; // 초기 설정 memset(dp, -1, sizeof(dp)); dp[1][1] = 1; dp[2][1] = 1; dp[2][2] = 1; dp[3][1] = 1; dp[3][2] = 2; dp[3][3] = 1; while (t--) { .. [백준/C++] 25602번: 캔 주기 문제https://www.acmicpc.net/problem/25602문제 요약랑이 집사는 매일 고양이 랑이와 메리에게 캔을 하나씩 준다. 랑이 집사는 N가지 종류의 캔을 갖고 있고, i번째 캔을 A[i]개 갖고 있다. 랑이와 메리는 입맛이 까다롭고 변덕이 심해서 매일 각 캔에 대한 만족도가 다르다. 랑이가 i번째날 j번째 캔을 먹었을 때, 만족도는 R[i][j]이다. 메리가 i번째날 j번째 캔을 먹었을 때, 만족도는 M[i][j]이다. K일 동안, 랑이와 메리에게 캔을 주었을 때, 만족도 합의 최대를 출력한다. 코드#include #include #include #define ll long longusing namespace std;int N, K;// A[i]: i번째 캔 개수int A[10];// .. [백준/C++] 2529번: 부등호 문제https://www.acmicpc.net/problem/2529문제 요약두 종류의 부등호 기호 ''가 k개 나열된 순서열 A를 입력 받는다. 해당 부등호 기호들 앞뒤에 서로 다른 한 자릿수 숫자를 넣어 모든 부등호 관계를 만족시켜야 한다. 이 상황에서 부등호 기호를 제거한 뒤, 숫자를 붙이면 만들어지는 수들 중 최대 최소를 각각 출력한다.코드#include #include #include #define MAX_K 10using namespace std;// 부등호 개수int k;// 부등호 순서열char A[MAX_K];string max_num = "0";string min_num = "9876543210";bool visited[MAX_K]; void dfs(int num, string s) {.. [백준/C++] 14889번: 스타트와 링크 문제https://www.acmicpc.net/problem/14889문제 요약n명의 사람을 절반으로 나누어 스타트 팀과 링크 팀을 만든다. S[i][j]는 i번 사람과 j번 사람이 같은 팀에 속해 있을 때, 팀에 더해지는 능력치이다.(S[i][j]와 S[j][i]는 다를 수 있다.) n과 S[i][j]가 모두 주어졌을 때, 스타트 팀과 링크 팀의 능력치 차이의 최솟값을 출력한다.코드#include #include #define MAX_N 20using namespace std;int n;int S[MAX_N][MAX_N];// 최소 차이int res = 1e9;// i번 사람이 선택 되었는지bool selected[MAX_N];// 각 팀의 능력치 계산 후 차이의 최솟값을 갱신하는 함수void upda.. 이전 1 ··· 8 9 10 11 12 13 14 ··· 36 다음