본문 바로가기

전체 글

24524 아름다운 문자열 뭔가 한번 읽으면서 확인하면 될 것 같았는데 다른 문제 먼저 풀고 라운드 마친 뒤에 풀이 들었다. t가 a, b, c라고 하면 각각의 개수를 세주면 되는데 a는 앞에 아무런 조건이 없으므로 그냥 개수를 센다. b는 앞에 a가 무조건 있어야 하므로 a > b일 경우에만 b의 개수를 더했다. c는 앞에 b가 무조건 있어야 하므로 b > c일 경우에만 c의 개수를 더했다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #de.. 더보기
23083 꿀벌 승연이 신난다 노타빌리티에 육각 노트 써봤다 예전에 정사각형 개수 구하는 문제랑 비슷했다. 재귀로 n, m부터 한 칸씩 돌아가면서 구했다. 1, 1부터 n, m까지 경로를 구해야 하므로, 1, 1 위치만 1로 지정해서 더하게끔 했다. 참고로 y가 짝수냐 홀수냐 따라서 움직일 수 있는 좌표가 달라진다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(),.. 더보기
1242 소풍 아 정말 너무너무 어렵다. 처음에 나이브하게 풀었더니 시간초과가 났다. (예상했다) 시간을 줄이기 위해 삭제 할 때마다 상대적인 좌표를 사용해서 풀려고 했다. 그런데 틀렸다..... 뭔가 생각이 꼬여서 틀린 것 같다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() #define MAXV 1000000007 using na.. 더보기
세그먼트 트리 마주하고 말았다. 세그먼트 트리 세그먼트 트리 구간을 반복해서 2등분 한 뒤 각각의 잘린 구간이 자신의 구간인 대푯값을 저장하고 관리하게 만드는 자료구조 query: O(logN) update: O(logN) query는 정확히는 O(2logN) 레벨당 2개의 노드만 건드리게 된다. 구현 full binary tree 형태를 가지기 때문에 힙처럼 구간의 모든 값을 배열에 저장할 수 있다. 어떤 노드의 번호가 idx면 왼쪽 자식은 2 * idx, 오른쪽 자식은 2 * idx + 1 배열의 크기는 4 * n 이상으로 설정해야 한다 int query(int l, int r, int node, int nodeL, int nodeR) { if (l nodeR) return v[node]; if (nodeL == .. 더보기
플로이드 와샬 알고리즘 https://m.blog.naver.com/PostView.naver?blogId=kks227&logNo=220797649276&referrerCode=0&searchKeyword=%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%93%9C 플로이드 와샬 알고리즘(Floyd-Warshall Algorithm) 마지막으로 알려드릴 최단경로 알고리즘입니다. 참 많기도 하죠. 이번엔 플로이드 와샬 알고리즘(Floyd-W... blog.naver.com 아직 전부 이해는 못했지만.. - 모든 정점 쌍 사이의 최단 경로를 한번에 구할 수 있다 - 시간복잡도 O(V^3) - i, j, k - i번 정점에서 j번 정점까지, 1~k번 정점만 사용할 떄의 최단 거리를 구하라 - dist에는 1 ~ k-1번 정점만.. 더보기
13019 A를 B로 - 순서가 올바르지 않으면 무조건 옮겨야 한다 - 어떤 것들을 옮길지가 중요하지 어떤 순서로 옮겨야 하는지는 중요하지 않다 - 그래서 뒤에서부터 올바르지 않은 알파벳들의 개수를 세어주었다 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() #define MAXV 987654321 using namespace std; using i64 = lo.. 더보기
12915 대회 개최 가장 간단한 해결책을 생각해본다면 x와 y를 모두 다 구하는 건데 그럼 시간 복잡도가 초과된다. 10^5 * 10^5 ... 이제 y의 시간복잡도를 줄이도록 노력해야 하는데... b와 c가 같아지고, 최대한 큰 값이 되게 하는 y를 구하면된다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() #define MAXV 987654321 usi.. 더보기
6503번 망가진 키보드 푸는 중 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() #define MAXV 987654321 using namespace std; using i64 = long long int; using ii = pair; using iis = pair; using ii64 = pair; using iii = tuple; int _arr[400]; int* arr = _a.. 더보기