목록알고리즘 (6)
운기의 블로그
#include #include #include #include #include using namespace std; vector solution(vector orders, vector course) { vector answer; map result; for (int i = 0; i < orders.size(); i++) { sort(orders[i].begin(), orders[i].end()); } for (int i = 0; i < course.size(); i++) { int course_size = course[i]; for (int j = 0; j < orders.size(); j++) { int order_size = orders[j].size(); if (course_size second ..
기존에는 string 문자열을 하나씩 분리하는 방법으로 했다면, 이번에는 정규식에 대해서 좀 더 알게 된 기회였다. #include #include #include #include using namespace std; string solution(string new_id) { string answer = ""; // 대문자 소문자로 치환 for (int i = 0; i = 'A' && new_id[i] 15) { new_id.erase(15, end - 15); } //마침표가 처음이나 끝이면 제거 new_id = regex_replace(new_id, regex("^[.]|[.]$"), ""); // 2자리이하면 마지막문자를 3자리 ..
접근방식 이 문제 역시 n의 값이 100,000이기 때문에 이중 포문으로는 해결이 안될거라 생각하고 다른 방식 있는지 살펴봤다. 해당 문제는 dp 문제에 가깝다고 생각했고 천천히 살펴 본 결과 0번째 배열의 값은 아래의 0, 1 번 배열의 값을 더한 값, 1번째 배열의 값은 아래의 0,1,2번 배열의 값을 더한 값, 2번째 배열의 값은 아래의 1,2번 배열의 값을 더한 값 이라는걸 이용하면 될 거라고 생각했다. 그래서 규칙을 찾고 식을 세워 접근했다. 위에서 부터 값을 계산해서 배열의 값을 변경하는것보다 아래의 값부터 위로 올라오는 방식을 택했다. 코드 #include #include #include #include using namespace std; int max_dp[100001][3]; int m..
접근방식 접근방식은 딱히 없었다. 말 그대로 피보나치 공식만 적용하면 되기 때문이다. 코드 #include #include #include using namespace std; int main() { int n; cin >> n; long long arr[91]; arr[0] = 0; arr[1] = 1; for (int i = 2; i
접근방식 문제를 보면 N의 값이 100,000 이 주어진다. 대부분 100,000개면 시간복잡도 계산을 요구하는 경우가 많은데, 해당 경우에는 이중 포문을 돌리면 무조건 시간초과가 발생하게 된다. 그래서 어떻게 하면 for 문 한번에 해결할까에 대해 고민 후 2003번 수들의 합2에서 마지막에 남겨 두었던 투 포인터 방법을 이용하기로 했다. 해당 문제는 생각보다 오래걸렸는데 그 이유는 문제를 잘 못 이해했었다. S의 값과 동일한 경우만 인줄 알았는데 S의 값 이상인 경우 였으니까 조심하자. 코드 #include #include #include #define INF 210000000 using namespace std; int main() { int n; int s; cin >> n; cin >> s; i..
접근방식 연속된 합을 구하기 위해 이중 포문을 사용하기로 결정했다. 이중 포문을 사용하기전에 N의 값이 10,000개라 시간초과에 대한 위험이 있을 수 있다고 생각했지만, 적절하게 for문안에 break를 사용하면 시간초과는 나지 않을거라고 판단하고 진행했다. 코드 #include #include #include using namespace std; int main() { int n; int m; int count = 0; cin >> n; cin >> m; vector v; for (int i = 0; i > x; v.push_back(x); } for (int i = 0; i < n-1; i++) { int x = v[i]; if (x == m) { coun..