일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 우테코
- 서블릿
- 프리코스
- yml
- AOP
- 우아한세미나
- 미션
- REDIS
- 코드리뷰
- Level2
- 세션
- 자바
- CircuitBreaker
- HTTP
- MSA
- Paging
- mock
- JPA
- 의존성
- 프로그래머스
- 레벨2
- Spring Batch
- 우아한테크코스
- Docker
- JUnit5
- 스프링부트
- 백준
- 트랜잭션
- 스프링 부트
- AWS
- Today
- Total
목록알고리즘_백준/문자열 (5)
늘
진짜 간단해보였는데, 돌릴때마다 새로운 반례들을 만나면서 생각보다 시간이 오래걸렸다.. 알고리즘은 덱 이라는 자료구조를 이용하여 앞에서와 뒤에서 빼는 방식을 사용해야했다. 그렇지 않고 v.erase(v.begin())으로 앞에서 지우면 시간초과가 나왔다. 그리고reverse할 때, 진짜로 reverse하면 안되고 reverse했을땐 뒤에서, 정방향일 땐, 앞에서 pop해주는 방식으로 해결했다. 주저리 주저리 설명보단 역시 코드로 보는게 빠를듯 하다. 반례를 여러번 고치다보니 조금 지저분하긴 하다.... #include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); in..
알고리즘은 간단했다. 단순히 완전 탐색 방식으로 조합의 모든 경우를 계산하고 중복되는 만큼 ex) aabab와 같은 경우 3! 2!으로 나눠주면 됐다. 문자열보단 조합론(?)에 가까운 문제였다. 하지만 조합은 1 3 2 처럼 모두 다른 숫자나 문자로 구성되었지만 이 문제는 중복된 문자들도 있기 때문에 각 문자마다 id값을 주어 구분하였다. #include #include #include using namespace std; vector v;// id, 문자 int over[27]; int visited[27]; string s; int n; char ans[11]; int res = 0; int factorial(int n) { long long sum = 1; for (int i = 1; i > s; ..
이 문제는 대회 당시에 시간초과로 시간을 많이 잡아먹었는데 대회가 끝나고 자료구조를 set으로 바꿔서 해보니 한번에 통과되어서 상당히 현타가 왔던 문제였다.... #include #include #include #include using namespace std; string s, e, q; set st; long long Change(string s) { string si = s.substr(0, 2); string boon = s.substr(3,2); return 60 * stol(si) + stol(boon); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> s >> e >> q; string str, name; int cnt = ..
#include #include #include #include using namespace std; string c; string s; string boom; int main() { cin.sync_with_stdio(false); cin.tie(NULL); int del = 0; cin >> c; cin >> boom; int i; int last = boom.length() - 1;//boom의 마지막 문자 for (i = 0; i =last) { del = 0; for (int j = 1; j < boom.length(); ++j) { if (boom[last - j] != s[s.size(..
첫 알고리즘은 백준에 있는 난이도 골드5인 LCS문제이다 문자열 길이를 구하는 문제로 알고리즘을 모르면 해매기 쉬울것 같다. #include #include #include #include using namespace std; int dp[1001][1001]; int main() { string main_str, sub_str; cin >> main_str >> sub_str; main_str = "0" + main_str; sub_str = "0" + sub_str; int main_len = main_str.length(); int sub_len = sub_str.length(); for (int i = 1; i < main_len; ++i) { for (int j = 1; j < sub_len; ..