문제링크 : https://www.acmicpc.net/problem/1890 #include using namespace std; int arr[100][100]; long long dp[100][100]; //범위가 크므로 long long 선언 int n; int main() { cin >> n; for (int i = 0; i > arr[i][j]; //게임판 입력 } } dp[0][0] = 1; //무조건 첫번째 값은 지나므로 초기화 값은 1 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (arr[i][j] == 0) { break; } //마지막..
문제링크 : https://www.acmicpc.net/problem/1051 #include using namespace std; int n, m; int arr[50][50]; int main() { cin >> n >> m; string input; for (int i = 0; i > input; //숫자를 한줄로 입력받기에 스트링으로 받음 for (int j = 0; j < m; j++) { arr[i][j] = input[j] - '0'; //받은 문자열(숫자)를 하나하나 다시 숫자로 변환 } } int k = min(n, m); //정사각형의 최대 길이 저장 while (k--) { for (int i = 0; k + i < n; i++) //인덱스에 범위 값 설..
문제링크 : https://www.acmicpc.net/problem/16922 #include using namespace std; int n, result; int arr[4] = { 1, 5, 10, 50 }; bool check[1001]; //50 * 20 + 1 void func(int cnt, int index, int sum) { if (cnt == n) { if (!check[sum]) // 1 + 5 = 5 + 1이기에 조건을 검 { check[sum] = 1; //방문처리 result++; //조건에 맞는 값 카운트 셈 } return; } for (int i = index; i < 4; i++) { func(cnt + 1, i, sum + arr[i]); //현재 인덱스 기준으로 자..
문제링크 : https://www.acmicpc.net/problem/2841 #include using namespace std; int N, P; stackplay[7]; int moving = 0; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> P; while (N--) { int a, b; cin >> a >> b; if (play[a].empty()) //해당 줄이 비어있다면 해당 플렛 푸쉬 { play[a].push(b); moving++; } else if (play[a].top() < b) //뒤에 값이 더 크다면 해당 플렛 푸쉬 { play[a].push(b); moving++; } else if (play[a].t..
문제링크 : https://www.acmicpc.net/problem/25644 #include using namespace std; #define fastio ios_base::sync_with_stdio(0); cin.tie(0); int n, result = 0, sum = 0; vector arr; int main() { fastio; cin >> n; for(int i=0; i> a; arr.push_back(a); //a1 ~ an 푸쉬 } for (int i = arr.size() - 1; i >= 0; i--) { result = max(result, arr[i]); //최댓값 저장 sum = max(sum, result - arr[i]); //최댓값과 현재 값의 차이 중 가장 큰 값을 저..
문제링크 : https://www.acmicpc.net/problem/3135 #include using namespace std; #define fastio ios_base::sync_with_stdio(0); cin.tie(0); int A, B, N, teleport, result; int main() { fastio; cin >> A >> B; cin >> N; result = abs(A-B); //증가, 감소로만 이동 while (N--) { cin >> teleport; result = min(result, abs(B - teleport) + 1); //즐겨찾기로 이동한 값과, 증가 및 감소로만 이동한 값중 작은 값 선택 } cout
문제링크 : https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net #include using namespace std; int n; long long dp[90]; //범위 초과로 long long 자료형 사용 int main() { cin >> n; dp[0] = 0; dp[1] = 1; for (int i = 2; i
문제링크 : https://www.acmicpc.net/problem/1032 1032번: 명령 프롬프트 첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 www.acmicpc.net #include using namespace std; int main() { int n; cin >> n; string s = ""; char c[50]; cin >> s; for (int i = 0; i < s.length(); i++) //비교용으로 첫 문자열을 따로 저장해놈 { c[i] = s[i]; } for (int i = 1; i < n; i++) //맨 처음에 문자열..
문제링크 : https://www.acmicpc.net/problem/9084 #include using namespace std; int t, n, coin[21], m; int dp[10001]; int main() { cin >> t; while (t--) { memset(dp, 0, sizeof(dp)); //매 케이스마다 배열을 0으로 초기화 dp[0] = 1; //처음 경우의 수는 무조건 1이므로 1로 초기화 cin >> n; for (int i = 0; i > coin[i]; } cin >> m; for (int i = 0; i < n; i++) { for (int j = coin[i]; j
문제링크 : https://www.acmicpc.net/problem/12919 #include using namespace std; string S, T, temp = ""; int result = 0; void func(string s, string t) { if (s == t) { result = 1; return; } //바꿀 수 있을 때 if (s.size() >= t.size()) { return; } //바꿀 수 없을 때 if (t[t.size() - 1] == 'A') //맨 마지막이 A이면 { temp = t; temp.erase(temp.size() - 1); //A를 지우고 재귀 func(s, temp); } if (t[0] == 'B') //맨 처음이 B이면 { temp = t; t..
문제링크 : https://www.acmicpc.net/problem/5177 #include using namespace std; int k; string s1, s2; string func(string s) { for (int i = 0; i = 1 && s[s.length() - 1] == ' ') //문자열 맨뒷부분이 공백이면 지우기 s.pop_back(); for (int i = 1; i < s.length(); i++) //특수문자 앞이나 뒤가 공백이면 지우기 { char a = s[i - 1], b = ..