본문 바로가기

전체 글

(23)
BOJ 400솔 PS를 시작한 시기에 비해 되게 늦게 달성한 편이다. 많이 풀었다고 하면 많이 푼 것이고, 적게 풀었다고 하면 적게 푼 느낌.. 공부를 해 봤다고 말하려면 1000솔은 해야 하지 않을까 싶다. 그때까지 달려보자! + Pentagon03 감사합니다.
2.21 PS: 쉬운 정올 문제 풀기 정올 문제들이 전반적으로 괜찮다고 생각한다. 적당히 높은 수준, 참신한 아이디어 등등.. 그래서 골드 문제들만 찍먹하기로 했다. 백준 17623 괄호 ( 2019 고등부 본선 2번 ) www.acmicpc.net/problem/17623 17623번: 괄호 6개의 문자 ‘(’, ‘)’, ‘{’, ‘}’, ‘[’, ‘]’ 로 이루어진 올바른 괄호 문자열 W에 대하여 정수의 ‘괄호값’을 지정하는 함수 val(W)가 정의되어 있다. 먼저 올바른 괄호 문자열부터 정의해 www.acmicpc.net 되게 참신한 문제다. 나만 몰랐던 건가? 풀이>> 더보기 주요 아이디어: DP 문제에서는 마치 변수 두 개를 만족하는 최적해를 내놓으라는 것 같아서 접근이 힘들어 보이는데, 잘 보면 괄호 값 자체는 고정되어 있다. 그..
2.18 PS: 도전 www.acmicpc.net/problem/10098 10098번: 양분 섬을 합동인 두 다각형으로 나누는 선분이 존재하면, 선분의 두 끝점이 (x1, y1), (x2, y2)일 때 x1, y1, x2, y2를 나타내는 4개의 정수를 한 줄에 출력하면 된다. x1=x2이거나 y1=y2여야 한다. 선분은 다 www.acmicpc.net 백준 10098 양분.. 아이디어는 대강 생각해 놓았다.진짜 풀어보고 싶다. 대충 세 단계 정도면 풀 수 있다. (아마?) 1. 합동이면 넓이가 같으므로, 넓이를 이등분하는 x축, y축에 평행한 직선을 이분 탐색으로 빠르게 찾는다.이 "빠르게" 는 x축 기준, y축 기준으로 블록들을 나눈 뒤에 부분합 배열을 만들어서 할 수 있다. 2. 교점을 구해서 새로운 다각형 두 개를 ..
2.17 PS: 세종정보올림피아드 밀기 세종정보올림피아드를 개인 사정으로 불참하고 나서, 언젠가는 풀어야겠다는 생각을 하고 있었다. 그런데, 요즘 푸는 문제들이 하나같이 귀찮다. 재밌긴 한데, 구현까지 가지를 못 한다. PS에 대한 즐거움을 살리기 위해 오늘 한번 날을 잡고 풀어 보았다. 학원 수업은 안 들었지만 어떠한가. 체감 난이도는 실5-실1-플5-플4? 되게 쉽게 풀고 끝낼 줄 알았는데, 난 내 생각보다 더 못한다.;; code.sasa.hs.kr/problemset.php SASA OJ code.sasa.hs.kr 함께 풀어볼 분들은 이 사이트를 권합니다. 2690 세종이와 레이저(L)(고등부 A번) ABC C번에 나올것처럼 생겼다. 풀이>> 더보기 주요 아이디어: 구현, map 원점을 레이저로 잡고 기울기들을 세면 된다. 이건 st..
solved.ac 2000점 행복하다.
유클리드 호제법 알고리즘의 시간복잡도 예측하기 UPD: 자기 전에 생각해보니, 유클리드 호제법은 끝나기 직전을 제외하고 무조건 2 이상의 수로 나눌 수밖에 없어서 log의 밑이 2보다는 크다. 따라서 아래 글은 전부 헛짓이다.. 오늘 학원에서 공부를 하다가 굉장히 재밌는 논의를 발견했다. 그걸 이용해서 유클리드 호제법 연산 횟수의 상한을 알아내 보았다. 0. 유클리드 호제법 알고리즘 & 왜 이걸 증명하는가 유클리드 호제법은 다음 사실에 기반한다: $a, b$가 $a\geq b$를 만족하는 정수이고, $a=bq+r$이 성립할 때, $gcd(a, b) = gcd(b, r)$이다. 그런데, $gcd(a, 0)=a$임을 알고 있고, $r$은 $b$보다 작으므로 $min(a, b)$는 자연수의 감소수열이 되고, 언젠가 0이 되므로 저 방식을 계속 쓰다 보면 ..
Segment Tree with Lazy Propagations 레이지 프로파게이션..배우겠다고 몇 번을 다짐한 자료 구조 중 하나이다. I. 단순 세그먼트 트리 우리가 처음에 구현한 세그먼트 트리는, 어떤 구간에 대한 연산과 특정 원소 ​하나​를 바꾸는 연산을 모두 O(logN)에 처리한다. void update(ll n, ll k) { n += base; IDT[n] += k; while (n > 1) { n /= 2; IDT[n] = IDT[n * 2] + IDT[n * 2 + 1]; } } ll query(ll s, ll e, ll node, ll nodel, ll noder) { if (nodere) return 0; if (s https://blog.naver.com/insoo0327/222208708167 2. 레이지에 여러 가지 연산 합치기 보통 어려운..